'fopen'返回NULL - “没有这样的文件或目录”

时间:2013-09-20 21:48:51

标签: c xcode terminal fopen

我编写了一个超级简单的C命令行工具,它应该从argv[1]中指定的路径读取文件。我在OS X上使用Xcode进行调试,因此运行时的工作目录是一个Xcode创建的目录,与我想要读取的文件分开。 (Xcode自动插入参数,所以这不是问题。)我怀疑问题与我不理解fopen如何工作有关。当我输入路径名时,它是否相对于工作目录?如果我使用绝对路径,它会起作用吗?

我已经检查了this postthis onethis one,但在这种情况下他们似乎没有帮助我。

这是我正在使用的代码 - 它位于main函数中:

for (int i = 0; i < argc; i++)
    printf("arg%i: %s\n", i, argv[i]);

if (argc > 1)
{
    //Open the file specified by the first argument
    system("pwd");
    FILE *file = fopen(argv[1], "r");    //Always returns NULL

    if (file)
        //This isn't ever reached
    else
        printf("%s\n", strerror(errno));        
}

输出如下:

arg0: /Users/home/Library/Developer/Xcode/DerivedData/VSSequenceAlignment-avlfehlrtqiybygqfgueezoysnyi/Build/Products/Debug/VSSequenceAlignment
arg1: C:/Users/venkateshsivaramanDP/Documents/test/testdoc.txt
/Users/venkateshsivaramanDP/Library/Developer/Xcode/DerivedData/VSSequenceAlignment-avlfehlrtqiybygqfgueezoysnyi/Build/Products/Debug
No such file or directory

将arg1更改为使用正斜杠后,它没有更改错误。不可否认,它更接近实际问题。

2 个答案:

答案 0 :(得分:1)

你的道路是错的;您正在使用Windows路径。

将您提供的路径与arg0进行比较,指定可执行文件的路径。 arg1必须采用相同的风格。

答案 1 :(得分:0)

是的,绝对路径适用于fopen,但这不是您的问题。我认为您的问题来自arg[1]的内容,我认为它包含C:\Users\home\Documents\test\testdoc.txt这是一个Windows路径,而您在OS X上。