21xrx.com
2024-11-22 07:47:37 Friday
登录
文章检索 我的文章 写文章
C++ 如何获取文件夹中文件个数?
2023-07-09 22:26:07 深夜i     --     --
C++ 获取 文件夹 文件个数

在C++中,要获取文件夹中文件的个数,需要使用Windows API中的FindFirstFile函数、FindNextFile函数和FindClose函数来实现。这些函数定义在Windows.h头文件中。

首先,需要使用FindFirstFile函数打开文件夹并获取第一个文件的句柄。这个函数的返回值是一个查找句柄,如果返回值是INVALID_HANDLE_VALUE,表示打开文件夹失败。否则,程序可以使用FindNextFile函数遍历文件夹中的文件,直至将所有文件遍历完毕。

在遍历的过程中,可以使用WIN32_FIND_DATA结构体存储当前文件的信息,包括文件名、文件大小、文件属性等等。使用此结构体,且判断是否为文件,即可对文件进行统计。

统计文件个数时,需要注意,文件夹中有可能存在子文件夹。为了避免重复计数,需要使用递归算法来遍历文件夹中的所有子文件夹,并将所有子文件夹中的文件个数相加。

当程序遍历完成所有文件时,需要使用FindClose函数关闭查找句柄,以释放资源。

下面是示例代码:


#include <iostream>

#include <windows.h>

int countFilesInDirectory(const char *dirPath) {

  WIN32_FIND_DATA FindFileData;

  HANDLE hFind = INVALID_HANDLE_VALUE;

  char searchPath[MAX_PATH];

  snprintf(searchPath, MAX_PATH, "%s\\*", dirPath);

  hFind = FindFirstFile(searchPath, &FindFileData);

  if (hFind == INVALID_HANDLE_VALUE)

    std::cerr << "Failed to open directory: " << dirPath << std::endl;

    return -1;

  

  int count = 0;

  do {

    if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {

      if (strcmp(FindFileData.cFileName, ".") != 0 && strcmp(FindFileData.cFileName, "..") != 0) {

        char filePath[MAX_PATH];

        snprintf(filePath, MAX_PATH, "%s\\%s", dirPath, FindFileData.cFileName);

        count += countFilesInDirectory(filePath);

      }

    } else {

      count++;

    }

  } while (FindNextFile(hFind, &FindFileData) != 0);

  FindClose(hFind);

  return count;

}

int main(int argc, char **argv) {

  if (argc != 2)

    std::cerr << "Usage: count_files_in_dir.exe <directory_path>" << std::endl;

    return 1;

  

  int count = countFilesInDirectory(argv[1]);

  std::cout << "Number of files in directory " << argv[1] << ": " << count << std::endl;

  return 0;

}

此代码使用递归算法遍历文件夹中的所有子文件夹,并统计文件个数。如果打开文件夹失败或者文件夹不存在,则返回-1。如果程序运行成功,则返回文件个数。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复