C++ 从C+;中的文件名获取完整路径+;

C++ 从C+;中的文件名获取完整路径+;,c++,windows,path,directory,filenames,C++,Windows,Path,Directory,Filenames,我正在使用C/C++在Windows上开发一个应用程序。 我想知道,如何从文件名/目录获取文件/目录的完整路径 例如: 我的文件名是test\test.txt,实际上它位于C:\Sample\test\test.txt,我的项目位于E:\MyProject 那么如何从filenametest\test.txt获取完整路径,即C:\Sample\test\test.txt。 任何目录也是如此 我尝试使用GetFullPathName,但它只返回E:\MyProject\test\test.txt,

我正在使用C/C++在Windows上开发一个应用程序。 我想知道,如何从
文件名/目录
获取
文件/目录的完整路径

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

那么如何从filename
test\test.txt
获取完整路径,即
C:\Sample\test\test.txt
。 任何目录也是如此

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

提前谢谢。

您可以看看

它可以非常灵活地处理所有常见的路径操作

就你而言:

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

  std::cout << absolute(path("test\\test.txt"), path("C:\\Sample")) << std::endl;
}
intmain()
{
使用boost::filesystem::absolute;
使用boost::filesystem::path;
std::cout你可以看看

它可以非常灵活地处理所有常见的路径操作

就你而言:

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

  std::cout << absolute(path("test\\test.txt"), path("C:\\Sample")) << std::endl;
}
intmain()
{
使用boost::filesystem::absolute;
使用boost::filesystem::path;


std::cout所以您已经在E:\MyProject中运行了可执行文件,并且只想通过提供“test\test.txt”从C:\Sample\test\test.txt打开文件?我说的对吗?如果你的描述是准确的,那么,你就不能。如果不搜索整个硬盘驱动器,就不可能有重复的。你有一个相对路径。你怎么可能添加从一开始就不存在的信息呢?事实上,
GetFullPathName
返回正确的答案。那么,它返回的答案就是我想要的应该是的。但是您还没有完全指定您想要的。看起来您是在要求魔法发生。您的下一步是以有意义的方式定义您的问题。您好,实际上我正在使用
ReadDirectoryChangesW
监视文件/目录及其子目录。我已经添加了
C:\Sample
目录进行监视,所以当任何修改都会对其中的任何文件/目录进行通知。所以我想知道的是,当
test.txt
被修改时,它会返回我
test\test.txt
值,但我实际上想要
C:\Sample\test\test.txt
值,那么我该如何实现这一点呢?我当前的工作目录也是
E:\MyProject
。希望t他的解释很清楚。所以您已经在E:\MyProject中运行了可执行文件,并且只想通过提供“test\test.txt”从C:\Sample\test\test.txt打开文件?我说的对吗?如果你的描述是准确的,那么,你就不能。如果不搜索整个硬盘驱动器,就不可能有重复的。你有一个相对路径。你怎么可能添加从一开始就不存在的信息呢?事实上,
GetFullPathName
返回正确的答案。那么,它返回的答案就是我想要的应该是的。但是您还没有完全指定您想要的。看起来您是在要求魔法发生。您的下一步是以有意义的方式定义您的问题。您好,实际上我正在使用
ReadDirectoryChangesW
监视文件/目录及其子目录。我已经添加了
C:\Sample
目录进行监视,所以当任何修改都会对其中的任何文件/目录进行通知。所以我想知道的是,当
test.txt
被修改时,它会返回我
test\test.txt
值,但我实际上想要
C:\Sample\test\test.txt
值,那么我该如何实现这一点呢?我当前的工作目录也是
E:\MyProject
。希望t他的解释很清楚。根据文档路径绝对值(const path&p,const path&base=current_path());其中current_path()-当前工作目录路径。需要根据这样的问题修改基本路径绝对值(路径(“test\\test.txt”)、路径(“C:\\Sample”))@谢尔盖:已经提到了第二个论点,但我的回答更具体了一点。谢谢。谢谢你的回答,实际上我不知道基本路径,即“C:\\Sample”。我只知道一件事,即“test\\test.txt”,我需要从中找出整个路径,所以可以使用
absolute()吗
method?我还要问的另一个问题是,我是否可以将“Boost Filesystem”库与我的应用程序一起分发给我的客户,因为它是用于商业用途的?@JorgeChon:我给你的链接还包含了关于如何
absolute()
可以运行。我相信在这种情况下,它会像您需要的那样工作。而且不要担心Boost许可证:Boost库几乎可以被视为“标准”并且使用非常宽松的许可证。你几乎可以用它做任何你想做的事情,这包括在商业应用中使用。嗨,谢谢@ereOn。我在使用
absolute()时遇到以下错误
方法->
错误:LNK1104:无法打开文件'libboost_filesystem-vc100-mt-gd-1_53.lib'
。您能告诉我我做错了什么吗?根据文档路径绝对值(const path&p,const path&base=current_path());其中current_path()-当前工作目录路径。需要根据以下问题修改基本路径:绝对路径(“test\\test.txt”)、路径(“C:\\Sample”)@Sergey:已经提到了第二个参数,但我的回答更具体了。谢谢。谢谢你的回复,实际上我不知道基本路径,即“C:\\Sample”。我只知道一件事,即“test\\test.txt”,从中我需要找出整个路径,所以可以使用
absolute()
方法吗?我还要问的另一个问题是,我可以分发“Boost Filesystem”吗将我的应用程序与库一起提供给我的客户,因为它是用于商业用途的?@JorgeChon:我给你的链接还包含了一个关于
absolute()
如何运行的解释。我相信在这种情况下,它会像你需要的那样工作。而且不要担心Boost许可证:Boost库几乎可以被认为是“标准的”并且使用一个非常许可的许可证。你几乎可以用它做任何你想做的事情,这包括在商业应用程序中的使用