使用字符串名称打开输出文件流 P>我有一些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");

使用字符串名称打开输出文件流 P>我有一些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");,c++,csv,filepath,ofstream,C++,Csv,Filepath,Ofstream,我确保使用c_str方法将要打开的名称作为const char*传递,但是如果我通过添加以下行来测试代码: std::cout您的问题可能是由于路径以~开头,而不是扩展到/{home,Users}/${LOGNAME} 也许对你有用 不幸的是,没有一种标准的、可移植的方法可以准确地找出open()失败的原因: 我知道将字符串作为文件名传递不起作用,这就是为什么我认为使用c_str()进行转换就足够了 是否接受常量std::string&(从C++11开始) 你提供了这些文件的绝对路径

我确保使用c_str方法将要打开的名称作为const char*传递,但是如果我通过添加以下行来测试代码:


std::cout您的问题可能是由于路径以
~
开头,而不是扩展到
/{home,Users}/${LOGNAME}

也许对你有用

不幸的是,没有一种标准的、可移植的方法可以准确地找出
open()
失败的原因:

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


是否接受
常量std::string&
(从C++11开始)

你提供了这些文件的绝对路径吗?如果您输出的是实际的文件名,那么它们是否正确?它们是否正确-这些文件还不存在,应该创建它们,然后将其写入。Re最后一点:仅在C++11中。较旧的编译器可能不支持它。
std::ofstream outputFile;
outputFile.open(outputName.c_str());
std::ofstream outputFile1;
outputFile1.open(outputName1.c_str());
std::ofstream outputFile2;
outputFile2.open(outputName2.c_str());