【问题标题】:how to print a file path using GetFullPathName in c in windows如何在 Windows 中使用 C 中的 GetFullPathName 打印文件路径
【发布时间】:2021-10-02 16:42:39
【问题描述】:

希望你有美好的一天;

所以我使用 GetFullPathName 来获取C programming language 中的 powershell.exe 的路径:

我在这里使用了这段代码: parsing a path using a functoin called getfullpathname() in C? 我也在这里使用了代码: I have errors using GetFullPathName

无论我使用什么,我都会得到以下输出:

Full path: C

如果我调试它但是我可以看到路径的其余部分...

我最后尝试的代码是:

    TCHAR* fileExt;
    TCHAR szDir[256];

    GetFullPathName("powershell.exe", 256, szDir, &fileExt);

    printf("Full path: %s\n", szDir);

我尝试了同样的结果:

   char filename[] = "powershell.exe";
   char fullFilename[MAX_PATH];
   GetFullPathName(filename, MAX_PATH, fullFilename, NULL);
   printf("Full path: %s\n", fullFilename);

我也尝试了这里和那里的多个代码,我知道为什么但输出总是相同的,正如我提到的,如果我调试它,我可以看到完整路径,但我不能将它放入控制台,我使用 c而不是 cpp 文件,并使用 Visual Studio 2019。

【问题讨论】:

    标签: c file path console


    【解决方案1】:

    你在 ansi 和 unicode 之间进行混搭。

    相反,请执行以下操作:

    TCHAR* fileExt;
    TCHAR szDir[256];
    
    GetFullPathName(TEXT("powershell.exe"), 256, szDir, &fileExt);
    
    _tprintf(TEXT("Full path: %s\n"), szDir);
    

    TEXT 宏扩展为 ansi 或宽字符串文字,具体取决于您是否在启用 UNICODE 的情况下进行编译。

    _tprintf 扩展为printfwprintf,具体取决于您是否在启用UNICODE 的情况下进行编译。对于printf%s 指定一个ansi 字符串,对于wprintf%s 指定一个宽字符串。

    GetFullPathName 扩展为 GetFullPathNameAGetFullPathNameW,同样取决于您是否在启用 UNICODE 的情况下进行编译。前者需要(并返回)ansi 字符串,后者需要宽字符串。

    【讨论】:

    • 首先感谢您和@andreas 的关注...我尝试按照您告诉我的方式进行操作,但它输出了以下链接错误:LNK2001 unresolved external symbol _tprintf
    • 后面的代码将使用 CreateProcessA 创建一个 powershell 进程,所以如果这样可以简化必须保存路径文件的方式或它的类型...
    • 好吧,那么就使用 GetFullPathNameA 并且不要打扰 TCHAR 以及 ansi 和 unicode 兼容性。
    猜你喜欢
    • 2021-09-19
    • 2019-08-22
    • 1970-01-01
    • 2020-07-05
    • 2014-10-25
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多