2013-02-21 162 views
1

我正在使用C/C++在Windows上处理应用程序。 我想知道,如何从filename/directory获得file/directory的完整路径?从C++中获取文件名的完整路径

对于如: 我的文件名是test\test.txt,实际上它位于C:\Sample\test\test.txt,我的项目位于E:\MyProject

那么我怎样才能从文件名test\test.txt得到完整的路径,即C:\Sample\test\test.txt。 同样适用于任何目录。

我试过使用GetFullPathName,但它只返回E:\MyProject\test\test.txt这是不正确的。

在此先感谢。

+0

因此,您已经在E:\ MyProject中运行了可执行文件,并且想通过提供“test \ test.txt”打开C:\ Sample \ test \ test.txt中的文件?我对么? – 2013-02-21 08:16:27

+0

如果您的描述很准确,那么您不能。不是没有搜索整个硬盘驱动器,并且可能总是有重复。你有一个相对路径。你怎么可能添加从来没有的信息? – 2013-02-21 08:40:29

+0

其实'GetFullPathName'返回正确的答案。那么,它会返回它应该的答案。但是你还没有完全指定你想要的。你似乎在寻求魔法的发生。您的下一步是以有意义的方式定义您的问题。 – 2013-02-21 10:21:53

回答

1

你可以看看Boost Filesystem

它处理相当整齐的所有常见的路径操作。

你的情况:

int main() 
{ 
    using boost::filesystem::absolute; 
    using boost::filesystem::path; 

    std::cout << absolute(path("test\\test.txt"), path("C:\\Sample")) << std::endl; 
} 

注意,第二个参数是absolute()可选指定“当前路径”,以用来确定绝对路径。可能你想要在你的情况下。

+0

根据文档路径absolute(const path&p,const path&base = current_path()); where current_path() - 当前工作目录路径。需要修改基本路径,像这样绝对(路径(“test \\ test.txt”),路径(“C:\\ Sample”)) – 2013-02-21 08:22:20

+0

@Sergey:已经提到了第二个参数,但我做了我的回答更具体。谢谢。 – ereOn 2013-02-21 08:34:32

+0

感谢您的回复,实际上我不知道基本路径,即“C:\\ Sample”。我只知道一件事,即“test \\ test.txt”,从中我需要找出整个路径,那么可以使用'absolute()'方法吗?还有一个问题需要问我是否可以将我的应用程序的“Boost Filesystem”库分发给我的客户,因为它用于商业用途? – 2013-02-21 09:19:46

相关问题