我正在 Mac 上制作一个简单的应用程序(OSX Mavericks,用 clang 编译)。
问题是,当我尝试使用相对路径打开文件时,它不起作用。如果我使用绝对路径它就有效。
例如,如果我尝试:fp = fopen("file.txt", "r");
它返回NULL
.
它仅在我使用时才有效:fp = fopen(" User/UserName/Project_folder/file.txt", "r");
(项目文件夹是我正在编译的文件夹,它有我的file.txt)
该文件位于完全相同的目录中。
我该如何解决这个问题?
同样的代码不久前也运行良好,现在这个代码和其他使用fopen
显示同样的问题。
当你跑步时fopen
如果没有完整路径,它将使用运行程序的位置的当前工作目录。因此,如果您的工作目录(通过输入获得pwd
在外壳中)你从哪里执行你的程序 is ~/my_folder/
and file.txt
恰好在~/my_folder/bin/
那么即使你的可执行文件在里面~/my_folder/bin/
它不会找到file.txt
。因为它会寻找~/my_folder/file.txt
.
因此,如果您从与 file.txt 不同的目录运行程序,则必须提供绝对路径或提供相对于运行程序的目录的路径。
有关工作目录的信息,请参阅http://www.linfo.org/current_directory.html
Update
如果您有权访问字符串数组参数(argv[]
) of main
方法。 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]
。希望能帮助到你 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)