使用FindFirstFile和FindNextFile查找某个目录下的所有文件(包括子目录)

一、在不使用mfc的程序中获得某个目录下的所有文件名称,包括子目录。把文件名称以一个固定的程度放入一个缓冲中,这个缓冲要足够的大,能容下所有的文件名称。

函数的输入为要查找的根目录,输出为存放所有文件名称的缓冲

算法:使用递归
二、代码:

void FindFileInDir(char* rootDir, char* strRet)

{

    char fname[MAC_FILENAMELENOPATH];

    ZeroMemory(fname, MAC_FILENAMELENOPATH);

 

    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);

       FindFileInDir(tmpPath, strRet);

    }

   

    else   if( strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )

              {

                  sprintf(fname, "%-50.50s", fd.cFileName);

                  strcat(strRet + strRet[strlen(strRet)] , fname);

              }

 

    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);

              FindFileInDir(tmpPath, strRet);

           }

   

           else   if( strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )

                     {

                         sprintf(fname, "%-50.50s", fd.cFileName);

                         strcat(strRet + strRet[strlen(strRet)] , fname);

                     }

       }

       else

       {

           if( GetLastError() == ERROR_NO_MORE_FILES )          //Normal Finished

           {

              bSearchFinished = TRUE;

           }

           else

              bSearchFinished = TRUE;     //Terminate Search

       }

    }

 

    FindClose(hSearch);

   

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Windows 上实现用 C 语言显示指定目录下的目录文件,可以使用 Windows API 函数来实现。具体步骤如下: 1. 使用 `FindFirstFile()` 函数查找指定目录下的第一个文件子目录。 2. 使用 `FindNextFile()` 函数查找下一个文件子目录,直到没有文件子目录为止。 3. 对于每个找到的文件子目录,可以使用 `FindFirstFile()` 和 `FindNextFile()` 函数返回的 `WIN32_FIND_DATA` 结构体中的信息来获取文件名、文件大小、创建时间等信息。 4. 使用 `printf()` 函数将文件名和相关信息输出到控制台。 以下是示例代码: ```c #include <stdio.h> #include <windows.h> int main() { WIN32_FIND_DATA FindFileData; HANDLE hFind; char directory[MAX_PATH]; printf("Please input the directory path: "); scanf("%s", directory); strcat(directory, "\\*.*"); hFind = FindFirstFile(directory, &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { printf("Failed to find files in the directory!\n"); return 1; } do { if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { printf("%s [directory]\n", FindFileData.cFileName); } else { printf("%s [file] %d bytes\n", FindFileData.cFileName, FindFileData.nFileSizeLow); } } while (FindNextFile(hFind, &FindFileData)); FindClose(hFind); return 0; } ``` 该代码通过用户输入指定目录的路径,然后使用 `FindFirstFile()` 函数查找目录下的所有文件子目录,并使用 `FindNextFile()` 函数遍历所有文件子目录,最后使用 `printf()` 函数将文件名和相关信息输出到控制台。可以根据需要对输出的信息进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值