C++获取目录中文件的完整路径

3

我有一个程序可以将用户的壁纸设置为文件。我需要获取图像文件的完整路径。

下面是我的代码

#include <windows.h>
int main()
{
    FreeConsole();
    const wchar_t *filenm = L"hay.jpg"; //Get path to hay.jpg
    bool isWallSet = SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, 
    (void*)filenm, SPIF_UPDATEINIFILE);
    return 0;
}

这里的任何人怎么知道你把文件存储在哪里?为什么不自己写路径呢? - Ulrich Eckhardt
1
你的系统中图片文件存储在哪里? - 4aRk Kn1gh7
如果图像位于程序的当前工作目录中,您可以使用 GetCurrentDirectory 获取该目录的绝对路径。 - Steadybox
2个回答

7
假设所需文件位于当前工作目录内,GetFullPathName 似乎是一个不错的选择。它接收一个文件名并将其转换为完整路径,方法是将当前工作目录添加在文件名之前。
请注意文档中的警告:您无法安全地在多线程程序中使用此 API,因为当前工作目录被保存为进程范围的全局变量,访问该变量不是线程安全的。
同时还要注意,无论文件是否存在于工作目录中,API 都会返回一个路径;它只是将您提供给它的文件名与当前工作目录拼接。
#include <windows.h>

int main()
{
  char filename[] = "test.txt";
  char fullFilename[MAX_PATH];

  GetFullPathName(filename, MAX_PATH, fullFilename, nullptr);

  MessageBox(NULL, fullFilename, "DEBUG", MB_OK);
}

6
如果您使用Visual Studio 2015,您可以使用新的filesystem库来完成此操作。
#include <filesystem>
using filesystem = std::experimental::filesystem::v1;
  ...
  const wchar_t *filename = filesystem::canonical(L"hay.jpg").c_str();
  ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接