C++ 如何检查文件夹中有多少文件?

C++ 如何检查文件夹中有多少文件?,c++,windows,file,C++,Windows,File,我想检查指定目录中有多少文件。例如,我在.exe旁边有一个名为resources的目录,我想检查其中有多少.txt文件 这是如何在Windows中C++中完成的? 我会使用boost::filesystem。甚至还有一个文件系统为您完成了大部分工作。我会使用boost::filesystem。甚至还有一个可以为您完成大部分工作的系统。这取决于操作系统。在Windows上,您可以使用和来枚举目录内容,使用适当的过滤器,如“*.txt”。做完后别忘了打电话 在基于Unix的操作系统上,可以使用和枚举

我想检查指定目录中有多少文件。例如,我在.exe旁边有一个名为
resources
的目录,我想检查其中有多少.txt文件


<>这是如何在Windows中C++中完成的? 我会使用boost::filesystem。甚至还有一个文件系统为您完成了大部分工作。

我会使用boost::filesystem。甚至还有一个可以为您完成大部分工作的系统。

这取决于操作系统。在Windows上,您可以使用和来枚举目录内容,使用适当的过滤器,如
“*.txt”
。做完后别忘了打电话


在基于Unix的操作系统上,可以使用和枚举目录内容。你必须自己过滤文件名。完成后别忘了打电话。

这取决于操作系统。在Windows上,您可以使用和来枚举目录内容,使用适当的过滤器,如
“*.txt”
。做完后别忘了打电话


在基于Unix的操作系统上,可以使用和枚举目录内容。你必须自己过滤文件名。完成后别忘了打电话。

此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); 
}
#包括
#包括
#定义_WIN32_WINNT 0x0501
#包括
#定义BUFSIZE MAX_路径
int main(int argc,char*argv[])
{ 
WIN32_FIND_DATA FindFileData;
句柄hFind=无效的句柄值;
德沃德误差;
LPSTR-DirSpec;
无符号整数文件=0;
DirSpec=(LPSTR)malloc(BUFSIZE);
strcpy(DirSpec,“c:\\*.txt”);
printf(“当前目录:%s\n\n”,DirSpec);
hFind=FindFirstFile(DirSpec和FindFileData);
if(hFind==无效的句柄值)
{ 
printf(“不正确的句柄:%u.\n”,GetLastError());
返回(-1);
} 
其他的
{ 
printf(“%s\n”,FindFileData.cFileName);
while(FindNextFile(hFind和FindFileData)!=0)
{ 
nFiles++;
printf(“%s\n”,FindFileData.cFileName);
} 
dwError=GetLastError();
FindClose(hFind);
printf(“\n找到%d个文件。\n\n”,n文件);
if(dwError!=错误\u无\u更多\u文件)
{ 
printf(“FindNextFile错误。\n”,dwError);
返回(-1);
} 
} 
免费(DirSpec);
返回(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); 
}
#包括
#包括
#定义_WIN32_WINNT 0x0501
#包括
#定义BUFSIZE MAX_路径
int main(int argc,char*argv[])
{ 
WIN32_FIND_DATA FindFileData;
句柄hFind=无效的句柄值;
德沃德误差;
LPSTR-DirSpec;
无符号整数文件=0;
DirSpec=(LPSTR)malloc(BUFSIZE);
strcpy(DirSpec,“c:\\*.txt”);
printf(“当前目录:%s\n\n”,DirSpec);
hFind=FindFirstFile(DirSpec和FindFileData);
if(hFind==无效的句柄值)
{ 
printf(“不正确的句柄:%u.\n”,GetLastError());
返回(-1);
} 
其他的
{ 
printf(“%s\n”,FindFileData.cFileName);
while(FindNextFile(hFind和FindFileData)!=0)
{ 
nFiles++;
printf(“%s\n”,FindFileData.cFileName);
} 
dwError=GetLastError();
FindClose(hFind);
printf(“\n找到%d个文件。\n\n”,n文件);
if(dwError!=错误\u无\u更多\u文件)
{ 
printf(“FindNextFile错误。\n”,dwError);
返回(-1);
} 
} 
免费(DirSpec);
返回(0);
}

100%依赖操作系统。请注意,有些用C语言编程的系统甚至不存在任何类型的系统。如果在这样的系统上调用fopen,则会出现链接器错误!现在标记为Windows,因此它将是FindFirstFile()、FindNextFile()和FindClose()API调用。100%依赖于操作系统。请注意,有些用C语言编程的系统甚至不存在任何类型的系统。如果在这样的系统上调用fopen,则会出现链接器错误!现在标记为Windows,因此将使用FindFirstFile()、FindTextFile()和FindClose()API调用。