C查找某个目录下的所有文件(包括子目录)(转)

//原作者不详,偶然发现。然后稍做了修改,测试了以下。整理了一下。

#include "stdio.h"
#include "windows.h"
#include "winbase.h"
void FindFileInDir(char* rootDir);

main()
{
 FindFileInDir("C://");
}

void FindFileInDir(char* rootDir)//, char* strRet)
{
    char fname[1024];
    ZeroMemory(fname, 1024);
    WIN32_FIND_DATA fd;
    ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
    HANDLE hSearch;
    char filePathName[256];
    char tmpPath[256];
    ZeroMemory(filePathName, 256);
    ZeroMemory(tmpPath, 256);
    strcpy(filePathName, rootDir);
    BOOL bSearchFinished = FALSE;
    if( filePathName[strlen(filePathName) -1] != '//' )
    {
       strcat(filePathName, "//");
    }
    strcat(filePathName, "*");

    hSearch = FindFirstFile(filePathName, &fd);
 
    //Is directory

    if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

       && strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )      
    {

       strcpy(tmpPath, rootDir);


       strcat(tmpPath, fd.cFileName);

    if( tmpPath[strlen(tmpPath) -1] != '//' )
  {
   strcat(tmpPath, "//");
  } 
       FindFileInDir(tmpPath);
    }
    while( !bSearchFinished )
    {

       if( FindNextFile(hSearch, &fd) )
       {

           if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

              && strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )      
           {

              strcpy(tmpPath, rootDir);

              strcat(tmpPath, fd.cFileName);
      if( tmpPath[strlen(tmpPath) -1] != '//' )
    {
     strcat(tmpPath, "//");
    } 

              FindFileInDir(tmpPath);
           }
           else   if( strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )
                  {
      printf("%s%s/n",rootDir,fd.cFileName);
         
                  }
       }
       else
    {
           if( GetLastError() == ERROR_NO_MORE_FILES )        
           {
              bSearchFinished = TRUE;

           }
           else
              bSearchFinished = TRUE;
       }
    }
    FindClose(hSearch);

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下命令来遍历目录下的文件并输出它们的日期: ```bash find /path/to/dir -type f -exec stat -c %y {} \; ``` 这条命令会在目录`/path/to/dir`下查找所有文件(`-type f`),然后使用`stat`命令来查看每个文件的日期(`%y`),并输出(`-exec`)。 如果你想要遍历目录子目录,可以在命令中加入`-mindepth 1`和`-maxdepth n`选项来限制遍历的深度。例如,如果你想要遍历所有子目录(包括当前目录),可以使用以下命令: ```bash find /path/to/dir -mindepth 1 -maxdepth 1 -type f -exec stat -c %y {} \; ``` 注意: 上述命令中的`/path/to/dir`应该替换为你想要遍历的目录的实际路径。 ### 回答2: 在Shell脚本中,可以使用`find`命令来遍历某个目录下不同层级的所有文件,并使用`stat`命令来输出文件的日期。 下面是一个示例的Shell脚本代码: ```shell #!/bin/bash # 设置要遍历的目录 directory="/path/to/directory" # 使用find命令遍历目录下所有文件,并输出日期 find "$directory" -type f -exec stat -c "%n %y" {} \; ``` 上述代码中,`find`命令通过`-type f`参数指定只查找普通文件(排除目录和符号链接),然后使用`-exec`参数传递给`stat`命令来输出文件路径和日期。`%n`表示文件路径,`%y`表示最后修改日期。 你可以将`/path/to/directory`替换为你要遍历的目录的实际路径,保存脚本为一个`.sh`文件,然后在Shell中运行脚本即可。 运行脚本后,它将遍历指定目录下的所有文件,并输出每个文件的路径和最后修改日期。 ### 回答3: 在shell脚本中,可以使用find命令来遍历指定目录下的文件,并输出文件的日期。 首先,我们需要使用find命令来查找指定目录下的所有文件,并使用-exec选项来执行输出日期的操作。下面是一个示例的shell脚本: ``` #!/bin/bash directory="/path/to/directory" # 指定要遍历的目录 # 使用find命令遍历目录下的文件,并输出文件的日期 find "$directory" -type f -exec stat -c "%n %y" {} \; ``` 上述脚本中,`/path/to/directory`需要替换为你要遍历的目录的实际路径。 `find`命令使用`-type f`选项来指定只查找文件,不包括目录。`-exec`选项用于在查找到的每个文件上执行后面的命令。`stat -c "%n %y"`命令用于输出文件的路径和修改日期。 运行脚本后,就会输出指定目录下所有文件的日期。可以根据实际需求对输出进行进一步处理或保存到文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值