C++ 一个接一个地打开两个文件

C++ 一个接一个地打开两个文件,c++,C++,尝试按如下方式依次打开两个文件时: ofstream transactionFileList(file_day, std::ios_base::app); transactionFileList << file_date << endl; transactionFileList.close(); ofstream transactionFile(file_date); for(int x = 0; x < _item_number_transaction.siz

尝试按如下方式依次打开两个文件时:

ofstream transactionFileList(file_day, std::ios_base::app);
transactionFileList << file_date << endl;
transactionFileList.close();


ofstream transactionFile(file_date);
for(int x = 0; x < _item_number_transaction.size(); x++){
    transactionFile << _item_number_transaction[x] << ":" << _quantity_transaction[x] << endl;
}
transactionFile.close();

file\u date
变量的文件名无效,因此
transactionFile
未打开,您可以按条件进行检查:

if (transactionFile) {
    // do something with stream...
}
file_date
包含一些操作系统中不能在文件名中使用的符号

我还建议使用RAII习惯用法的强大功能,不要显式调用
close()

{
    ofstream transactionFile(file_date);
    if (transactionFile) {
        for(int x = 0; x < _item_number_transaction.size(); x++){
        transactionFile << _item_number_transaction[x] << ":" <<  _quantity_transaction[x] << endl;
    } else {
        throw std::runtime_error("File not opened.");
    }
}
{
流事务文件(文件日期);
if(事务文件){
对于(int x=0;x<_项目_编号_事务处理.size();x++){

transactionFile您创建文件的方式日期
您会在其中输入一个特殊字符(
),系统可能不允许创建文件

例如,在windows shell中,我得到:

C:\test>echo foo>a:2.txt 这是一种可渗透的化学物质

(未找到路径的法文错误消息

AFAIK
用于将流记录到windows文件中(参考中)提取:

流的命名约定


从Windows shell命令行指定时,流的全名为“filename:stream name:stream type”,如以下示例所示:“myfile.dat:stream1:$DATA”.

Hmm,
file\u day
file\u date
的类型是什么?它们是类型
string
可能
file\u date
file\u day
具有相同的值?请参阅我的编辑,了解如何创建变量,其中OS?file\u数据包含管道符号和冒号(在Windows文件名中不允许)。
{
    ofstream transactionFile(file_date);
    if (transactionFile) {
        for(int x = 0; x < _item_number_transaction.size(); x++){
        transactionFile << _item_number_transaction[x] << ":" <<  _quantity_transaction[x] << endl;
    } else {
        throw std::runtime_error("File not opened.");
    }
}