C 能够以其完整路径打开代码::块中的文件,但不能以相对路径作为命令行参数打开文件

C++ Able to open a file in Code::Blocks with its full path, but not with relative path as a command line argument

本文关键字:文件 路径 相对 但不能 参数 命令行 代码      更新时间:2023-10-16

我正在使用Code :: blocks中的C 家庭作业项目,其中第一个命令行参数中指定要打开的文件名。我要打开的文件标题为inputfile1.txt。当我在下面运行代码时:

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <unistd.h>
using std::cout;
using std::ifstream;
using std::ofstream;
using std::cerr;
int main(int argc, char *argv[])
{
     ifstream inputFile;
     puts(getcwd(0,1234));
     inputFile.open(argv[1]);
     if (inputFile.is_open())
     {
         cerr << "Couldn't open file " << argv[1];
         return(EXIT_FAILURE);
     }
     cout << "nThe file to search is: " << argv[1];
     return(EXIT_SUCCESS);
}

显示错误消息"无法打开文件inputfile1.txt"。但是,当我输入Inputfile1.txt的完整路径时,该文件成功打开,如底部的消息的输出所示。已经采取了以下故障排除步骤:

  1. 在同一IDE上运行的C程序成功打开了文件。
  2. 验证文件名已正确拼写,是第一个命令行参数;还使用GEDIT打开文件。
  3. 验证了文件路径与当前工作目录输出匹配的puts(getCWD(0,1234)语句。
  4. 验证了代码:: blocks项目执行工作目录(项目> properties>构建目标 - 执行工作dir :)匹配步骤3的输出,并且该InputFile1.txt在工作目录中。
  5. 将工作目录更改为一个级别的目录,并将Inputfile1.txt复制到目录。再一次,通过完整的路径成功,但不像argv [1]。

我的分析:

  • 我不认为它是文件权限,否则它不会在GEDIT或完整的路径中打开。
  • 我认为这不是执行工作目录,否则它不会打开Code of Code :: Blocks的C程序。
  • 这与我的C 代码或代码:: Blocks配置有关。

任何见解/帮助都将不胜感激。

事实证明,上面列出的代码正常工作。以下代码中的if语句:

 inputFile.open(argv[1]);
 if (inputFile.is_open())
 {
     cerr << "Couldn't open file " << argv[1];
     return(EXIT_FAILURE);
 }

正在评估表达式inputFile.is_open()的结果,该结果在成功打开文件时返回了TRUE。要检查文件是否未成功打开,应使用表达式!inputFile.is_open()。感谢我的教授帮助我解决这个问题 - 错误是我自己的。