如何从argv中获取文件名并将其与ifstream一起使用/将其更改为ofstream的txt
How to take in a filename from argv and use it with ifstream / change it to txt for ofstream?
我知道如何通过argv参数迭代,但我想做的是采取文件路径,并在我的ifstream中使用该参数,并确保它是正确的格式(. dat),但随后对于我的ofstream,使用完全相同的路径,但扩展名为。txt。
我将传递所需的"base"名称作为参数。然后,当您尝试将其作为ifstream
打开时,请自己添加.DAT
扩展名并检查该文件是否存在。如果是,只需为ofstream附加.txt
并写入该文件。
例如,您可以调用:myapp.exe inout
然后,检查输入的文件名:
std::ifstream ifs(std::string(argv[1]) + ".dat"); // reads from inout.dat
if (ifs.fail()) ...
std::ofstream ofs(std::string(argv[1]) + ".txt"); // writes to inout.txt
if (ofs.fail()) ...
EDIT:您已经添加了将.dat
文件拖放到可执行文件上的重要细节。在这种情况下,您必须自己删除扩展。这样应该可以工作(但是不允许出错!):
std::string basename = argv[1]; // take the whole path, including dat extension (DAT EXTENSION!)
basename.resize(basename.length() - 3); // remove dat extension (hah!)
std::string outname = basename + "txt"; // add the output extension
注意:这段代码是未经测试的,一点也不健壮。它假定您传递给它的每个文件都有三个字母的扩展名。
我会通过调用rfind查找参数中最后出现的".DAT"的位置,然后获得结果位置的子字符串,您可以将。txt附加到该位置,类似于:
string fullPath = string(argv[1]);
size_t pos = fullPath.rfind(".DAT");
if (pos == string::npos)
{
//fail
}else{
string outfilePath = (fullPath.substr(0,pos)).append(".txt");
//write to file
}
相关文章:
- 如何将 txt 文件中的行分隔为组件C++
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 一种在C++中读取TXT配置文件的简单方法
- 如何修复此iFile以将.txt输出到控制台
- 无法打开.txt文件
- CMakeLists.txt中的命名空间表示法
- Arduino从Txt读取整数
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何拆分文件中.txt字母并使用c ++使用数组进行扑克?
- 使用fstream对txt文件中的数字进行循环
- Visual Studio在尝试读取resource.txt文件时崩溃
- 更正 CMakeList.txt 用于谷歌测试的文件?
- 如何从txt文件中读取多个不同长度的数组?
- 在一次迭代中从 txt 文件中读取多行
- std::ofstream 作为类成员删除复制构造函数?
- 将生成文件转换为 CMakeLists.txt等效项
- ofstream-保存一个函数以返回一个txt
- 如何从argv中获取文件名并将其与ifstream一起使用/将其更改为ofstream的txt
- 为什么ofstream( "log.txt" , ios::app|ios::trunc);总是失败?
- 使用c++中的istream/ofstream删除txt文件中的特定行