【发布时间】:2013-09-26 09:51:34
【问题描述】:
我编写了一个超级简单的 C 命令行工具,它应该从argv[1] 中指定的路径中读取文件。我在 OS X 上使用Xcode 进行调试,因此运行时的工作目录是一个 Xcode 创建的目录,与我要读取的文件分开。 (Xcode 会自动插入参数,所以这不是问题。)我怀疑问题与我不了解 fopen 的工作原理有关。当我输入路径名时,它是否相对于工作目录?如果我使用绝对路径,它会工作吗?
我检查了this post、this one 和this 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 更改为使用正斜杠后,它并没有改变错误。诚然,它离实际问题更近了一步。
【问题讨论】:
-
argv[0]似乎是 OSX 风格的路径,而argv[1]似乎是 Windows 风格的路径;这是怎么回事? -
我认为有些人在我链接的其中一个 SO 帖子上使用了反斜杠。在你这么说之前,在我看来并没有什么不同。