【问题标题】:Get fullpath from a filename in C++ [duplicate]从C ++中的文件名获取完整路径[重复]
【发布时间】:2013-02-06 11:21:45
【问题描述】:

我正在使用 C/C++ 在 Windows 上开发一个应用程序。 我想知道,如何从filename/directory 获取file/directory 的完整路径?

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

那么我怎样才能从文件名test\test.txt 中获取完整路径,即C:\Sample\test\test.txt。 任何目录都一样。

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

提前致谢。

【问题讨论】:

  • 所以您已经在 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。希望这个解释清楚。

标签: c++ windows path directory filenames


【解决方案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() 的第二个参数是可选,并指定用于确定绝对路径的“当前路径”。可能是您想要的。

【讨论】:

  • 根据文档路径 absolute(const path& p, const path& base=current_path());其中 current_path() - 当前工作目录路径。需要根据这样的问题修改基本路径 absolute(path("test\\test.txt"), path("C:\\Sample"))
  • @Sergey:已经提到了第二个论点,但我的回答更具体一些。谢谢。
  • 感谢您的回复,实际上我不知道基本路径,即“C:\\Sample”。我只知道一件事,即“test\\test.txt”,我需要从中找出整个路径,那么可以使用absolute() 方法吗?我还要问的另一个问题是,我可以将“Boost Filesystem”库与我的应用程序一起分发给我的客户,因为它是用于商业用途的吗?
  • @JorgeChon:我给你的链接还包含对absolute() 运作方式的解释。我相信在这种情况下它会像你需要的那样工作。并且不要担心 Boost 许可证:Boost 库几乎可以被视为“标准”并使用非常宽松的许可证。你几乎可以用它做任何你想做的事情,包括在商业应用中的使用。
  • 嗨,谢谢@ereOn。使用 absolute() 方法 -> error: LNK1104: cannot open file 'libboost_filesystem-vc100-mt-gd-1_53.lib' 时出现以下错误。你能告诉我我做错了什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 2012-04-24
相关资源
最近更新 更多