gpt4 book ai didi

c++ - Mac 上的 fopen 函数问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:26 25 4
gpt4 key购买 nike

我正在 Mac 上制作一个简单的应用程序(OSX Mavericks,使用 clang 编译)。问题是当我尝试使用相对路径打开文件时,它不起作用。如果我使用绝对路径,它会起作用。

例如,如果我尝试:fp = fopen("file.txt", "r");

它返回 NULL

它仅在我使用时有效:fp = fopen("User/UserName/Project_folder/file.txt", "r");(项目文件夹就是我编译的文件夹,里面有我的file.txt)

文件位于完全相同的目录中。

我该如何解决这个问题?

同样的代码在前一段时间运行良好,现在这段代码和其他使用 fopen 的代码都出现了同样的问题。

最佳答案

当您在没有完整路径的情况下运行 fopen 时,它会使用您运行程序所在位置的当前工作目录。因此,如果您的工作目录(通过在 shell 中键入 pwd 获得)您从中执行程序的位置~/my_folder/file .txt 恰好在 ~/my_folder/bin/ 那么即使你的可执行文件在 ~/my_folder/bin/ 它也不会找到 文件.txt。因为它将寻找 ~/my_folder/file.txt

因此,如果您从不同于 file.txt 的目录运行程序,那么您要么必须提供绝对路径,要么提供相对于您运行程序的目录的路径。

有关工作目录的信息,请参阅 http://www.linfo.org/current_directory.html

更新

如果您有权访问 main 方法的字符串数组参数 (argv[]),则可以使用一种解决方法。 argv 的第一个元素将包含用于执行程序的路径(来自工作目录)。按照简单的程序简单打印该参数。

int main(int argc, char *argv[])
{
printf("Path relative to the working directory is: %s\n", argv[0]);
return 0;
}

这将打印包含可执行文件名称的相对路径。如果该文件与可执行文件位于同一位置,则可以用 file.txt 替换可执行文件名称。这样它将在两种情况下加载:通过双击运行时以及通过导航到可执行文件的位置从命令行运行时。

您可能还必须考虑 argv[0] 开头的可能的 ./。希望对您有所帮助:)

关于c++ - Mac 上的 fopen 函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23974831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com