用字符串名称打开输出文件流

时间:2014-02-20 18:14:01

标签: c++ csv filepath ofstream

您好我有一些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。

1 个答案:

答案 0 :(得分:2)

您的问题可能是由~开头的路径造成的,该路径未扩展为/{home,Users}/${LOGNAME}

This answerHow to create a folder in the home directory?可能对您有用。

不幸的是,没有标准的,可移植的方式来找出open()失败的确切原因:

  

我知道传递字符串作为文件名不起作用,这就是为什么我认为使用c_str()进行转换就足够了。

std::basic_ofstream::open() 接受const std::string &(自C ++ 11起)!