4

我正在尝试执行以下操作:

FILE *fileNAME = fopen("file.txt", "r");

当我有以下情况时它可以工作:

FILE *fileNAME = fopen("users/username/desktop/folder/file.txt", "r");

但是因为我想在我的家用计算机之外使用这个文件,所以路径应该是相对的,特别是对于无法访问实际源代码的最终用户。我的问题是,如何实际完成这项工作,如果问题是由于编译器默认没有使用正确的目录,我该如何更改?(我正在使用 XCODE)

4

2 回答 2

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];
   ....
} 
于 2012-12-11T15:00:45.787 回答
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提取最后一次出现“/”字符之前的路径。

于 2012-12-11T15:02:10.947 回答