我编写了一个超级简单的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更改为使用正斜杠后,它没有更改错误。不可否认,它更接近实际问题。
答案 0 :(得分:1)
你的道路是错的;您正在使用Windows路径。
将您提供的路径与arg0进行比较,指定可执行文件的路径。 arg1
必须采用相同的风格。
答案 1 :(得分:0)
是的,绝对路径适用于fopen
,但这不是您的问题。我认为您的问题来自arg[1]
的内容,我认为它包含C:\Users\home\Documents\test\testdoc.txt
这是一个Windows路径,而您在OS X上。