C++;具有多个文件的文件I/O >如何检查目录中存在哪些文本文件,并在C++中获取目录中的文本文件的名称?< /p>
我的目标是列出特定目录中的文本文件,并让用户加载其中一个文件 我正在使用Windows 我的最后一段代码如下所示:C++;具有多个文件的文件I/O >如何检查目录中存在哪些文本文件,并在C++中获取目录中的文本文件的名称?< /p>,c++,windows,file-io,C++,Windows,File Io,我的目标是列出特定目录中的文本文件,并让用户加载其中一个文件 我正在使用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[2
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);
}
}
标准库不包含任何目录的概念,您需要求助于本机平台API或其他库,如boost(它将为您调用这些API)。由于您没有指定您使用的平台,而且我无法对您的问题发表评论,因此我将为Windows提供建议 您可以在Windows上使用,它允许您获取与某些字符串匹配的第一个文件的句柄,例如您的案例中的“*.txt”。要查找更多的文件,您可以使用,它允许您在特定目录中的所有文件上进行迭代,如果您希望在子文件夹中包含文本文件,您甚至可以非常轻松地实现循环执行此操作
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\\");
带有尾随的反斜杠。你说的“文件存在于文件中”是什么意思?你是说“文件存在于目录中”吗?通常,尤其是在Unix中,目录a.k.a.文件夹包含文件和子目录(子文件夹)。文件包含数据。Windows在文件中确实有许多文件概念,但是C++标准库不支持(可以使用Windows API访问这些流)。类似地,旧的Mac(可能仍在OSX中)也有文件“分叉”的概念。我对它了解不多,但如果它仍然存在,那么您可以使用OSXAPI来实现这一点。最后,还有许多种类的归档,例如zip,在单个文件中包含文件。是吗?总而言之,你需要澄清你的问题。如果是关于文件中的文件,那么请指定特定的概念(例如Windows、Mac或某种存档)。或者,在目录从来都不称为文件的地方使用通用术语。这个问题完全不清楚。我甚至尝试推断从配置文件读取的文件路径,但无法给出cocise答案。读取和迭代目录是特定于平台的,所以您使用的是哪个平台(提示:某些平台没有文件系统)?我使用的是windows,如果您能写一个示例代码,我会推荐它。谢谢,我已经添加了一个非常基本的代码示例,可以让您开始学习。谢谢。这段代码真的很有用没问题,我还编辑了你的问题,这样你的问题就更清楚了,如果问题解决了,别忘了接受答案;我发现错误:无法将参数1从“char(*)[2048]”转换为“LPCWSTR”?这是什么原因?是否有关于win32 api编程的教程可供推荐?