【问题标题】:C - Can't create a file on the current directory in OSXC - 无法在 OSX 的当前目录上创建文件
【发布时间】:2019-11-07 10:24:59
【问题描述】:

我必须将数据保存在项目的文件中(C 语言)。 所以我想使用fopen 来使用fprintf 在文件中输出我的字符串值。

所以,我愿意:

FILE * file;
file = fopen("./tmp.txt","w+");
outputData(); //my fonction to fprintf in the file
fclose(file);

但是当我这样做时,它不在当前目录中,而是在我的 我的计算机的用户目录(在 OSX 上),而不是应用程序午餐所在的当前目录。

那么,如何更改输出文件的当前目录?没有硬编码?

我正在执行我的程序:“/Users/Guillaume/OneDrive/Ephec/Os/Project1”

并且文件 tmp.txt 是在以下位置创建的: “/用户/纪尧姆” 我想在与我的项目相同的目录中创建文件

【问题讨论】:

  • 请显示更多信息。显示你如何运行你的程序,并在你运行程序时显示你终端的当前目录是什么(使用 shell 命令pwd)。
  • 我不明白你到底想做什么。如果您想获取您的主目录的位置,请使用getenv("HOME")。要获取当前目录的位置,请使用 getenv("PWD")
  • 对不起,我在我的演讲之间有很长时间的修改
  • 您似乎混淆了当前目录(也称为工作目录)和可执行文件所在的目录。对于后者,请参阅this question

标签: c macos directory fopen


【解决方案1】:

您可以尝试使用完整路径,如在 linux 上:

FILE * file;
file = fopen("/home/toto/tmp.txt","w+");

您还可以使用access检查文件访问权限

【讨论】:

  • 这不是他要的,
  • 是的,我知道,但它可以通过使用完整路径来工作。输出文件是关于编译器的。可以自己编译,不用默认配置
  • 这没有回答我的问题,我问是否可以在没有完整路径的情况下做到这一点,或者我想念你在说什么。
【解决方案2】:

我找到了解决办法。

char path[PATH_SIZE/2];
strcpy(path,realpath(argv[0],0));

我使用程序的 argv[0] 部分来获取路径 结合realpath()

手册页:http://manpagesfr.free.fr/man/man3/realpath.3.html

并将其存储在预定义的字符串路径中

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2016-03-17
    • 2019-06-22
    • 2013-10-26
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多