gpt4 book ai didi

c++ - 使用字符串名称打开输出文件流

转载 作者:行者123 更新时间:2023-11-28 02:56:15 25 4
gpt4 key购买 nike

您好,我有一些 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 定义的任何单词,例如'~/Desktop/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.

最佳答案

您的问题很可能是由于以 ~ 开头的路径没有扩展到 /{home,Users}/${LOGNAME}

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

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

I know passing strings as filenames does not work which is why I thought conversion with c_str() would be sufficient.

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

关于c++ - 使用字符串名称打开输出文件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21916192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com