【问题标题】:Why am I unable to create this file?为什么我无法创建此文件?
【发布时间】:2013-04-06 23:19:40
【问题描述】:

这是我的代码示例:

int main(int argc, char* argv[])
{
    char* fileName = "%appdata%\\log.log";
    FILE *file;
    file = fopen(fileName, "a+");
    time_t startTime = time(0);
    fputs("Started logging at: ", file);
    fputs(ctime(&startTime), file);
    fclose(file);
    printf("%s", fileName);
    return 0;
}

我的程序进入printf() 语句,并打印:

%appdata%\log.log

我知道这是 Windows 计算机的可行位置,那么为什么程序无法生成 .log 文件?我应该使用什么解决方法来使其正常工作?

【问题讨论】:

  • 您应该调用 CSIDL 或已知文件夹 API 函数之一。不要依赖环境变量。

标签: c windows file-io


【解决方案1】:

fopen 调用不知道%appdata% 是什么,因为它不能神奇地将其转换为路径。您必须使用 ExpandEnvironmentStrings 函数自己扩展路径。例如(未经测试):

char dest[MAX_PATH];
ExpandEnvironmentStrings(fileName, dest, MAX_PATH);
file = fopen(dest, "a+");

【讨论】:

  • 太棒了!在玩了一会儿之后,我得到了它的工作。这正是我想要的,谢谢。
【解决方案2】:
%appdata%

是一个环境变量,它们不会自动解析,需要使用getenv函数调用显式检索它们的值。

【讨论】:

    猜你喜欢
    • 2018-02-26
    • 2015-01-01
    • 1970-01-01
    • 2011-02-21
    • 2020-07-01
    • 2021-10-24
    • 2012-05-20
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多