首页 > 解决方案 > 如何在不使用文件扩展名的情况下使用命令行参数在 C++ 中打开文本文件?

问题描述

我正在编写一个 C++ 程序,其中我将文本文件的名称作为命令行参数传递,然后操作该文本文件。但我无法引用文本文件。问题是,我希望能够仅通过其名称引用传入的文件而无需扩展名。例如,我希望能够像这样引用代码:

./ProgramName exampleTextFileName

而不是这样:

./ProgramName exampleTextFileName.txt

我只需打开存储在 argv[1] 中的文件名并在命令行上使用 .txt 即可访问该文件。但是我怎么能做到这一点而不必在最后传递 .txt 呢?我尝试通过使用 argv[1] 并手动添加引号和 .txt 来执行此操作,但是当我尝试使用附加名称打开文件时出现错误。我假设文件名的变量类型实际上不是字符串?我将如何正确地做到这一点?

这是我试图使用的代码:

int main(int argc, char *argv[]) {
string line;
string fileName;
fileName = argv[1];
fileName = "\"" + fileName + ".txt\"";
cout << fileName;
ifstream myfile (fileName);
if (myfile.is_open()) {
    while ( getline (myfile,line) ) {
        cout << line << '\n';
    }
myfile.close();
}
else cout << "Unable to open file"; 


return 0;}

标签: c++command-linearguments

解决方案


你不需要双引号fileName,这应该足够了:

...
string fileName = argv[1];
fileName += ".txt";
...

我还会添加一个检查argc以确保实际给出了一个论点。


推荐阅读