带有多个文件的C ++文件I / O.

时间:2015-08-22 18:12:15

标签: c++ windows file-io

如何检查目录中存在哪些文本文件,并在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);
    }
}

1 个答案:

答案 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\\");

带尾部反斜杠。