如何检查目录中存在哪些文本文件,并在C ++中获取该目录中文本文件的名称。
我的目标是列出特定目录中的文本文件,并让用户加载其中一个文件。
我正在使用Windows。
我的上一段代码如下:
ListAllTxtFiles(L"C:\\Users\\Tnc\Desktop\\Yazılım Çalışmaları\\Projects\\Oyun Projem\\data\\SaveFiles\\");
void CObjectHandling::ListAllTxtFiles(const wchar_t *Directory)
{
TCHAR Buffer[2048];
wsprintf(Buffer, L"s%*.txt", Directory);//there are security considerations about this function
WIN32_FIND_DATAW FindData;
HANDLE FileHandle = FindFirstFileW(Buffer, &FindData);
if (FileHandle == INVALID_HANDLE_VALUE)
{
printf("Could not find any files..\n");
}
else
{
do
{
printf("Found %s\\%s\n", Directory, FindData.cFileName);
// Do stuff with your text file here...
} while (FindNextFile(FileHandle, &FindData));
CloseHandle(FileHandle);
}
}
答案 0 :(得分:0)
标准库不包含任何目录概念,您需要使用本机平台API或其他库(如boost)(然后将为您调用这些API)。由于您没有指定您正在使用的平台,并且由于我无法对您的问题发表评论,因此我将为Windows提供建议。
您可以在Windows上使用FindFirstFile,它允许您获取与某些字符串匹配的第一个文件的句柄,例如“* .txt”。要查找更多文件,您可以使用FindNextFile,它允许您迭代特定目录中的所有文件,如果您希望在子文件夹中包含文本文件,您甚至可以非常轻松地实现可以执行此操作的内容
void
ListAllTxtFiles(const char *Directory)
{
char Buffer[2048];
sprintf(Buffer, "%s*.txt", Directory);
WIN32_FIND_DATA FindData;
HANDLE FileHandle = FindFirstFile(Buffer, &FindData);
if (FileHandle == INVALID_HANDLE_VALUE)
{
printf("Could not find any files..\n");
}
else
{
do
{
printf("Found %s\\%s\n", Directory, FindData.cFileName);
// Do stuff with your text file here...
} while (FindNextFile(FileHandle, &FindData));
CloseHandle(FileHandle);
}
}
您可以将此功能称为
ListAllTxtFiles("path\\to\\my\\text\\files\\");
带尾部反斜杠。