지정한 디렉토리에 얼마나 많은 파일이 있는지 확인하고 싶습니다. 예를 들어 resources
이라는 내 .exe 옆에 디렉토리가 있고 그 안에 .txt 파일의 수를 확인하고 싶습니다.폴더에 얼마나 많은 파일이 있는지 확인하는 방법은 무엇입니까?
어떻게 Windows에서 C++로이 작업을 수행 할 수 있습니까?
지정한 디렉토리에 얼마나 많은 파일이 있는지 확인하고 싶습니다. 예를 들어 resources
이라는 내 .exe 옆에 디렉토리가 있고 그 안에 .txt 파일의 수를 확인하고 싶습니다.폴더에 얼마나 많은 파일이 있는지 확인하는 방법은 무엇입니까?
어떻게 Windows에서 C++로이 작업을 수행 할 수 있습니까?
운영 체제에 따라 다릅니다. Windows에서는 "*.txt"
과 같은 적절한 필터를 사용하여 FindFirstFile
과 FindNextFile
을 사용하여 디렉터리 내용을 열거합니다. 완료되면 FindClose
으로 전화를 걸지 마십시오.
UNIX 기반 운영 체제에서는 opendir(3)
및 readdir(3)
을 사용하여 디렉터리 내용을 열거합니다. 파일 이름을 직접 필터링해야합니다. 완료시 closedir(3)
으로 전화하는 것을 잊지 마십시오.
나는 boost :: filesystem을 사용할 것이다. 대부분의 작업이 완료된 sample program도 있습니다.
이 MS Windows 코드는 모두 .txt
개의 파일을 C :에 나열합니다. 다른 모든 파일을 나열하려면 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);
}
어떤 운영 체제입니까? –
100 % OS depedent. 어떤 종류의 filsystem도 존재하지 않는 C로 프로그래밍 된 시스템이 있다는 것을 알아 두십시오. 그러한 시스템에서 fopen을 호출하면 링커 오류가 발생합니다! –
지금 Windows로 태그가 붙어 있으므로 FindFirstFile(), FindNextFile() 및 FindClose() API 호출이 될 것입니다. –