我试图执行以下操作:
FILE *fileNAME = fopen("file.txt", "r");
当我有:
FILE *fileNAME = fopen("users/username/desktop/folder/file.txt", "r");
但是由于我想在家用计算机外使用此文件,因此路径应该是相对的,尤其是对于无法访问实际源代码的最终用户。我的问题是,如何实际使这项工作,如果问题是由于编译器默认情况下不使用正确的目录,我该如何更改? (我正在使用XCODE)
答案 0 :(得分:2)
当您通过命令
调用程序时,可以将文件路径作为输入参数传递$myprogram users/username/desktop/folder/file.txt
在您的代码源中,您可以从argv
获取此路径int main (int argc, char **argv)
{
char *file_path = argv[1];
....
}
argc是argv数组的长度。因此,如果数组长度小于2,则程序应返回帮助消息,指示用户输入文件路径作为参数
int main (int argc, char **argv)
{
char *file_path;
if (argc <2) {
printf("Usage: %s <file path>\n", argv[0]);
exit(1);
}
file_path = argv[1];
....
}
答案 1 :(得分:1)
如果您使用的是Mac OS X(Xcode,对,我不是OS X用户,但我认为是这样吗?),您可以使用
获取当前的可执行路径(不是当前的工作目录路径)char path[1024];
uint32_t size = sizeof(path);
if (_NSGetExecutablePath(path, &size) == 0)
printf("executable path is %s\n", path);
else
printf("buffer too small; need size %u\n", size);
在此之后,您有两种方式:
1)更新组合文件路径与exe目录(如sprintf(filepath, "%s/%s", path, "file.txt");
)
2)使用chdir功能更改当前目录,并使用相对路径访问文件。
编辑:_NSGetExecutablePath返回可执行路径,而不是可执行目录,因此请使用substr
/ strrchr
在最后一次出现'/'字符之前提取路径。