指定したディレクトリにいくつのファイルがあるかを確認したいと思います。例えば、私は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。 Cでプログラミングされたシステムが存在していて、filsystemの種類は存在しないことに気をつけてください。このようなシステムでfopenを呼び出すと、リンカエラーが発生します! –
Windowsとしてタグ付けされているので、FindFirstFile()、FindNextFile()、FindClose()API呼び出しになります。 –