【问题标题】:Save file in %temp% folder?将文件保存在 %temp% 文件夹中吗?
【发布时间】:2023-03-17 07:36:01
【问题描述】:

我想将文件保存在临时文件夹中,在运行时输入“%temp%”时可以轻松找到该文件夹​​,但不知道如何从 c++ 导航到它们。 p>

我尝试使用“GetTempPathA”或“GetTempFileNameA()”之类的函数,但它们不返回 char 值。出于我的目的,我使用“TResourceStream”中的“SaveToFile”方法并且需要 UnicodeString,如何找到这些信息?

【问题讨论】:

  • 这些 api 是您需要的并且确实返回字符串。阅读他们的文档。调用 W 版本获取 UnicodeString。

标签: c++ windows file save temp


【解决方案1】:

不,GetTempPathGetTempFileName 都没有 返回 char 值。通常,C 函数从不返回字符串。相反,您传入一个字符串缓冲区和该字符串缓冲区的长度,然后函数用请求的字符串填充字符串缓冲区。

例如,要调用GetTempPath,您可以编写以下代码:

TCHAR szTempPathBuffer[MAX_PATH];
GetTempPath(MAX_PATH,            // length of the buffer
            szTempPathBuffer);   // the buffer to fill

szTempPathBuffer 将包含临时目录的路径。

请注意,您可能不应该显式调用 ANSI 函数(带有A 后缀的函数)。十多年来,Windows 一直是完全的 Unicode。要么使用 Windows 标头定义的宏,根据是否定义 _UNICODE 自动解析为函数的正确版本,要么显式调用 Unicode 版本(带有 W 后缀的那些)。

由于您调用的是 ANSI 版本,因此您得到的是 ANSI 字符串(由 char 值组成),而不是 Unicode 字符串(由 wchar_t 值组成),这大概是 SaveToFile您尝试调用的方法期望。

【讨论】:

    【解决方案2】:

    也可以使用 getenv(),但它已被弃用并被视为“不安全”:

    #pragma warning(disable:4996) //disable getenv warning
    
    char* p = getenv("TEMP");
    std::string path(p); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多