我想检查指定目录中有多少文件。例如,我的.exe旁边有一个名为resources
的目录,我想检查一下.txt文件中有多少个。
如何在Windows中使用C ++完成此操作?
答案 0 :(得分:6)
我使用boost :: filesystem。甚至还有sample program,其中大部分工作都是为您完成的。
答案 1 :(得分:3)
这取决于操作系统。在Windows上,您可以使用FindFirstFile
和FindNextFile
来枚举目录内容,使用适当的过滤器,例如"*.txt"
。完成后不要忘记致电FindClose
。
在基于Unix的操作系统上,您可以使用opendir(3)
和readdir(3)
枚举目录内容。您必须自己过滤文件名。完成后别忘了打电话给closedir(3)
。
答案 2 :(得分:0)
此MS Windows代码列出了C:中的所有.txt
个文件。要列出所有其他文件,请将strcpy(DirSpec, "c:\\*.txt")
更改为strcpy(DirSpec, "c:\\*")
。
#include <stdio.h>
#include <stdlib.h>
#define _WIN32_WINNT 0x0501
#include <windows.h>
#define BUFSIZE MAX_PATH
int main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
DWORD dwError;
LPSTR DirSpec;
unsigned int nFiles=0;
DirSpec = (LPSTR) malloc (BUFSIZE);
strcpy(DirSpec, "c:\\*.txt");
printf ("Current directory : %s\n\n", DirSpec);
hFind = FindFirstFile(DirSpec, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("incorrect Handle : %u.\n", GetLastError());
return (-1);
}
else
{
printf ("%s\n", FindFileData.cFileName);
while ( FindNextFile (hFind, &FindFileData) != 0)
{
nFiles++;
printf ("%s\n", FindFileData.cFileName);
}
dwError = GetLastError();
FindClose(hFind);
printf ("\n %d files found.\n\n", nFiles);
if (dwError != ERROR_NO_MORE_FILES)
{
printf ("FindNextFile Error.\n", dwError);
return (-1);
}
}
free(DirSpec);
return (0);
}