⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getdir.cpp

📁 基本套接字编程 包括例程讲解和相关资料 网络课程用 很有价值
💻 CPP
字号:
// GetDir.cpp : Defines the entry point for the console application.
//

#include <stdafx.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string>

bool GetDirList(char* dir,char* res);

/*------------------------------------------------------------------------
 * main
 *------------------------------------------------------------------------
 */
// 运行命令:
// #dir .            显示当前文件夹的所有内容
// #dir ..           显示上一级文件夹的所有内容,并把上一级文件夹设为当前文件夹。
// #dir folder       显示文件夹folder的内容,并把folder设为当前文件夹。用ls也可以。
// #exit             退出。用quit也可以。

int main(int argc, char* argv[])
{
	char res[1000000]="",inbuf[256]="",cmd[256]="",param[256]="";
	while(1)
	{
  	  printf("#");                            // 显示命令提示标志
	  fflush(stdin);                          // 清空输入缓冲区
  	  scanf("%[^\n]s",inbuf);                 // 先从键盘输入字符串到inbuf,一直到\n
	  sscanf(inbuf," %s %[^\n]s",cmd,param);  // 将inbuf的字串转入cmd和param,
	                                          // 第一项先跳过开头的所有空格字符,然后读入一个字符串(%s)到cmd,
	                                          // 然后再跳过其后的所有空格字符,再读入一个字符串直到回车(%[^\n]s)到param.
      
	  if (strcmp(cmd,"exit")==0 || strcmp(cmd,"quit")==0)   //退出命令
	  {
	    break;
	  }

	  if (strcmp(cmd,"dir")==0 || strcmp(cmd,"ls")==0)     //文件夹列表命令
	  {
		  GetDirList(param,res);
          printf("%s",res);
      }
	  else
	  {
           printf("Command Error!\n");
	  }
	}
	return 0;
}

/*------------------------------------------------------------- 
* GetDirList(char* dir,char* res)
* 功能:显示某个目录下的内容列表  
* 参数: dir-要显示的文件夹
*        res-返回的结果,该文件夹下的内容列表。
*---------------------------------------------------------------
*/
bool GetDirList(char* dir,char* res)
{
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind = INVALID_HANDLE_VALUE;
  HANDLE hFilehandle = INVALID_HANDLE_VALUE;
  char DirSpec[MAX_PATH];
  DWORD dwError;
  char curDir[1000];

  if(strcmp(dir,"")==0)
    strcpy(dir,".");
  strcpy(curDir,dir);   

  strcpy(res,"");
  sprintf (res,"%sTarget directory is %s\n", res,curDir);
  strncpy (DirSpec, dir, strlen(curDir)+1);
  strncat (DirSpec, "\\*", 3);

  hFind = FindFirstFile(DirSpec, &FindFileData);

   if (hFind == INVALID_HANDLE_VALUE) 
   {
      sprintf (res,"%sInvalid file handle. Error is %u\n",res,GetLastError());
      return (false);
   } 
   else 
   {
	  int num = 0;
	  do
      {
         SYSTEMTIME sysCreationTime,sysLastWriteTime;
		 char sSize[16],sName[500],sCreationTime[50],sLastWriteTime[50];

         if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		     sprintf(sName,"[%s]",FindFileData.cFileName);
		 else
		     sprintf(sName,"%s",FindFileData.cFileName);

		 sName[32]=sName[33]=sName[34]='.';sName[35]='\0';
		

		 if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
             sprintf(sSize,"%10s KB","-");
		 else
             sprintf(sSize,"%10u KB",FindFileData.nFileSizeLow/1024);

		 FileTimeToSystemTime(&FindFileData.ftCreationTime,&sysCreationTime);
	     FileTimeToSystemTime(&FindFileData.ftLastWriteTime,&sysLastWriteTime);		 
         sprintf(sCreationTime,"%u-%u-%u %u:%u:%u",sysCreationTime.wYear,sysCreationTime.wMonth,sysCreationTime.wDay,sysCreationTime.wHour,sysCreationTime.wMinute,sysCreationTime.wSecond);
         sprintf(sLastWriteTime,"%u-%u-%u %u:%u:%u",sysLastWriteTime.wYear,sysLastWriteTime.wMonth,sysLastWriteTime.wDay,sysLastWriteTime.wHour,sysLastWriteTime.wMinute,sysLastWriteTime.wSecond);	
		 sprintf(res,"%s%3d %-36s %8s %s\n",res,++num,sName,sSize,sLastWriteTime);
      } while ((FindNextFile(hFind, &FindFileData)) != 0);
    
      dwError = GetLastError();
      FindClose(hFind);
      if (dwError != ERROR_NO_MORE_FILES) 
      {
		 sprintf (res,"%sFindNextFile error: %u\n", res, dwError);
         return (false);
      }
   }
   SetCurrentDirectory(curDir);
   return (true);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -