您好我有一些C ++代码使用用户定义的输入为某些输出文件生成文件名:
std::string outputName = fileName;
for(int i = 0; i < 4; i++)
{
outputName.pop_back();
}
std::string outputName1 = outputName;
std::string outputName2 = outputName;
outputName.append(".fasta");
outputName1.append("_Ploid1.fasta");
outputName2.append("_Ploid2.fasta");
其中fileName可以是用户可以使用.csv定义的任何单词,例如'〜/桌面/ mytest.csv'
代码关闭.csv并为3个输出流制作三个文件名/路径。
然后创建它们并尝试打开它们:
std::ofstream outputFile;
outputFile.open(outputName.c_str());
std::ofstream outputFile1;
outputFile1.open(outputName1.c_str());
std::ofstream outputFile2;
outputFile2.open(outputName2.c_str());
我确保使用c_str方法将名称传递给const char *,但是如果我通过添加以下行来测试我的代码:
std::cout << outputFile.is_open() << " " << outputFile1.is_open() << " " << outputFile2.is_open() << std::endl;
并将fineName编译并设置为“test.csv”。然而,我成功编译并运行
在屏幕上打印三个零,显示输出的三个文件流实际上没有打开。他们为什么不开业?我知道传递字符串作为文件名不起作用,这就是为什么我认为使用c_str()进行转换就足够了。
谢谢, 本W。
答案 0 :(得分:2)
您的问题可能是由~
开头的路径造成的,该路径未扩展为/{home,Users}/${LOGNAME}
。
This answer至How to create a folder in the home directory?可能对您有用。
不幸的是,没有标准的,可移植的方式来找出open()
失败的确切原因:
我知道传递字符串作为文件名不起作用,这就是为什么我认为使用
c_str()
进行转换就足够了。
std::basic_ofstream::open()
接受const std::string &
(自C ++ 11起)!