使用c语言从同一目录中fopen文件而不使用完整路径

时间:2012-12-11 14:54:36

标签: c xcode file directory fopen

我试图执行以下操作:

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

当我有:

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

但是由于我想在家用计算机外使用此文件,因此路径应该是相对的,尤其是对于无法访问实际源代码的最终用户。我的问题是,如何实际使这项工作,如果问题是由于编译器默认情况下不使用正确的目录,我该如何更改? (我正在使用XCODE)

2 个答案:

答案 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在最后一次出现'/'字符之前提取路径。