c++ - 如何在不使用文件扩展名的情况下使用命令行参数在 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;}
解决方案
你不需要双引号fileName
,这应该足够了:
...
string fileName = argv[1];
fileName += ".txt";
...
我还会添加一个检查argc
以确保实际给出了一个论点。
推荐阅读
- r - 基于R中的日期和小时以15分钟的间隔聚合数据
- c - C中OO继承的别名问题
- c++ - 使用未初始化的结构变量作为参数调用函数不会产生警告
- node.js - 如何在不硬编码查找索引的情况下使用符号获取节点超时的内部 id?
- vue.js - 如何在 main.js 中导入 javascript 库以在整个 vue 应用程序中全局可用?
- mysql - GROUP_CONCAT(DISTINCT xxx) 反转连接值的顺序
- java - 在 Eclipse 中为 JavaFx 打开设计选项卡时出错
- python - 如何使用 Pandas 数据框将 R 代码语法转换为 Python 语法?
- javascript - 将 props 从子组件传递给父组件
- list - 如何将列表中的每个数字与另一个列表中的每个数字相乘