WIN32_FIND_DATA返回“。”列出目录中的文件时使用“..”

时间:2016-12-31 13:33:35

标签: c++ windows file winapi unicode

我正在编写一个适用于Windows和Linux的虚拟文件系统。这是一项任务,所以不允许像Boost这样的外部事情。对于Windows版本,我正在尝试编写一个函数来安装给定目录中的所有文件。这是函数:

void FileSystem::MountDirectory(const std::string directory)
{
    WIN32_FIND_DATA search_data;

    memset(&search_data, 0, sizeof(WIN32_FIND_DATA));

    std::wstring wDir = StringToWstring(directory);
    LPCWSTR dir = wDir.c_str();
    HANDLE handle = FindFirstFile(dir, &search_data);

    if (handle == INVALID_HANDLE_VALUE)
    {
        std::cout << "ERROR: Unable to mount files in path: " << directory << std::endl;
    }
    else
    {
        while (handle != INVALID_HANDLE_VALUE)
        {
            std::string fileName = WCHARArrayToString(search_data.cFileName);
            File file(fileName, directory);
            m_MountedFiles.push_back(file);
            std::cout << "Succesfully mounted the file: " << fileName << std::endl;
            if (FindNextFile(handle, &search_data) == FALSE)
            {
                std::cout << "No more files to mount." << std::endl;
                break;
            }
        }
    }
    FindClose(handle);
}

我做了一些内联函数帮助从std :: string转换为std :: wstring,反之亦然。我在main.cpp中创建一个FileSystem对象,并在我的D:驱动器上的TestFolder路径上调用MountDirectory:

  

“d:\ TestFolder \ *。*”

到目前为止,这段代码有效,但在我的测试文件夹的输出中,它总是在其余文件之前打印出来:

  

成功安装了文件:。

     

成功安装了文件:..

为什么WIN32_FIND_DATA会选择这些“文件”,如何防止它?

1 个答案:

答案 0 :(得分:3)

分别代表当前目录和父目录。如果您枚举所有文件和目录,那么您将无法抑制枚举这些对象。如果您不想打印它们,请让代码检测并忽略它们。