C 从命令行读取文件,文件名作为参数

C 从命令行读取文件,文件名作为参数,c,command-line,argv,argc,C,Command Line,Argv,Argc,我应该在运行程序时打开并读取该文件,将其名称作为命令行的参数传递,但它一直在经历我在程序中设置的打开失败错误。该文件是正确的文件夹,我也打印了参数。包含程序名称的文件没有很好地存储,但确实存在,只是fopen函数失败了。。有人能帮我吗? 代码如下: int main(int argc, const char * argv[]) { if(argc != 2) { fprintf(stderr, "Error: please insert just the name of the fil

我应该在运行程序时打开并读取该文件,将其名称作为命令行的参数传递,但它一直在经历我在程序中设置的打开失败错误。该文件是正确的文件夹,我也打印了参数。包含程序名称的文件没有很好地存储,但确实存在,只是fopen函数失败了。。有人能帮我吗? 代码如下:

 int main(int argc, const char * argv[])
{
if(argc != 2)
{
    fprintf(stderr, "Error: please insert just the name of the file after the one of the program!\n");
    exit(EXIT_FAILURE);
}

FILE *foo;
foo = fopen(argv[1], "r");

if(foo == NULL)
{
    printf("Error: failed to open the file\n Argument: %s\n", argv[1]);
    exit(EXIT_FAILURE);

}
这里我留下截图

这是你的问题:

因为您只将文件名传递给了程序,所以它会在当前的工作目录中查找。正如我们从前面命令行上的
ls
命令中看到的,当前工作目录中只有两个文件: main.c和prova。文件ex3.txt不在那里

根据屏幕截图,这些命令行的当前工作目录似乎是
~/documents/computer science xcode project/21:12/ex3/ex3
, 但是ex3.txt文件实际上在目录中
/ex3-/Build/Products/Debug

显然IDE使用的是调试目录,而不是ex3目录, 作为其当前工作目录, 因为它能够在那里找到ex3.txt,而不需要您在文件名前面提供任何目录路径。

这是您的问题:

因为您只将文件名传递给了程序,所以它会在当前的工作目录中查找。正如我们从前面命令行上的
ls
命令中看到的,当前工作目录中只有两个文件: main.c和prova。文件ex3.txt不在那里

根据屏幕截图,这些命令行的当前工作目录似乎是
~/documents/computer science xcode project/21:12/ex3/ex3
, 但是ex3.txt文件实际上在目录中
/ex3-/Build/Products/Debug

显然IDE使用的是调试目录,而不是ex3目录, 作为其当前工作目录,
因为它能够在那里找到ex3.txt,而不需要您在文件名前面提供任何目录路径。

您在参数中使用了什么特定值?因为您描述的情况似乎不可能,所以您所说的可能与您所做的不完全一样。您说您传递了正确的文件名,并且该文件存在,但是您没有显示您使用的确切命令行,也没有显示该文件的目录列表。您可以尝试使用绝对文件路径而不是相对路径(这是仅使用文件名时得到的)。“文件位于正确的文件夹中”:如果不添加路径,它是否与可执行文件位于同一文件夹中?我看不出你的代码还有什么特别之处。你的文件已经在其他地方打开了吗?为什么不尝试使用不同的文件,或者首先尝试在代码中硬编码路径?我建议您将显示内容的副本剪切并粘贴到问题中,而不是粘贴到注释中(在注释中几乎无法读取)。问题下方有一个“编辑”按钮,允许您进行编辑。另外,您没有向我们展示
ex3.txt
存在于您认为存在的地方。您可以尝试
ls
cat ex3.txt
。可能IDE中文件的“正确位置”与您想象的不同。您在论证中使用了什么具体值?因为您描述的情况似乎不可能,所以您所说的可能与您所做的不完全相同。您说您传递了正确的文件名,并且该文件存在,但是您没有显示您使用的确切命令行,也没有显示该文件的目录列表。您可以尝试使用绝对文件路径而不是相对路径(这是仅使用文件名时得到的)。“文件位于正确的文件夹中”:如果不添加路径,它是否与可执行文件位于同一文件夹中?我看不出你的代码还有什么特别之处。你的文件已经在其他地方打开了吗?为什么不尝试使用不同的文件,或者首先尝试在代码中硬编码路径?我建议您将显示内容的副本剪切并粘贴到问题中,而不是粘贴到注释中(在注释中几乎无法读取)。问题下方有一个“编辑”按钮,允许您进行编辑。另外,您没有向我们展示
ex3.txt
存在于您认为存在的地方。您可以尝试
ls
cat ex3.txt
。也许IDE中文件的“正确位置”与您想象的不同。