Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;具有多个文件的文件I/O >如何检查目录中存在哪些文本文件,并在C++中获取目录中的文本文件的名称?< /p>_C++_Windows_File Io - Fatal编程技术网

C++;具有多个文件的文件I/O >如何检查目录中存在哪些文本文件,并在C++中获取目录中的文本文件的名称?< /p>

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

我的目标是列出特定目录中的文本文件,并让用户加载其中一个文件

我正在使用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);
    }
}

标准库不包含任何目录的概念,您需要求助于本机平台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编程的教程可供推荐?