使用FindFirstFile搜索目录的相对路径

relative path for searching directory with FindFirstFile

本文关键字:相对 路径 FindFirstFile 搜索 使用      更新时间:2023-10-16

在包含我的exe的目录中,我有一个名为" saved "的文件夹。我想显示这个目录中包含的文件。

我使用了下面的代码:使用C和Windows列出目录内容

现在是棘手的部分。如果我使用.\saves\作为我的目录,它告诉我无法找到路径。然而,如果我使用..\release\saves\,它工作得很好。但这是愚蠢的。我不想先回到父文件夹然后再返回。特别是关于我不知道用户给包含exe的目录起什么名字(在我的情况下,它是"释放",但谁知道用户做了什么:-D)。

我通读了这篇文章:http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#fully_qualified_vs._relative_paths,但是没有多大帮助。

我也试过saves\.saves\,但它也不起作用。

我希望有人能告诉我如何解决这个问题。

你实际上并没有在代码中做错什么——你已经从Visual Studio启动了这个项目,它将工作目录设置为Release/Debug文件夹的父目录。

进入项目->设置(属性)->配置属性->调试->工作目录

你也可以在VS之外运行exe,相对路径会像你期望的那样运行。

如果它是相对于可执行文件的路径,而不是相对于当前工作目录的路径,那么您可以使用GetModuleFileName()来获得可执行文件的完整路径。然后,从路径末尾删除可执行文件的名称,并使用

构建路径。
std::string executable_directory_path()
{
    std::vector<char> full_path_exe(MAX_PATH);
    for (;;)
    {
        const DWORD result = GetModuleFileName(NULL,
                                               &full_path_exe[0],
                                               full_path_exe.size());
        if (result == 0)
        {
            // Report failure to caller.
        }
        else if (full_path_exe.size() == result)
        {
            // Buffer too small: increase size.
            full_path_exe.resize(full_path_exe.size() * 2);
        }
        else
        {
            // Success.
            break;
        }
    } 
    // Remove executable name.
    std::string result(full_path_exe.begin(), full_path_exe.end());
    std::string::size_type i = result.find_last_of("\/");
    if (std::string::npos != i) result.erase(i);
    return result;
}

我将使用boost::filesystemhttp://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/index.htm。

作为奖励,您将获得与操作系统无关的代码

我认为你的错误是使用\saves\,忘记指定搜索参数/字符串
你应该使用:

saves\*

这将搜索任何文件或文件夹