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

Opening two files one after another

本文关键字:一个 两个 文件      更新时间:2023-10-16

尝试像这样一个接一个地打开两个文件时:

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();

我没有收到任何错误,但只创建了transactionFileList

此外,当我cout file_date时,我得到了13-04-1995.txt所以该变量没有问题!有什么想法吗?

<小时 />

变量

time_t t = time(0);
struct tm * now = localtime(&t);
char file_date[80];
char file_day[80];
strftime(file_date, 80, "%Y-%m-%d|%H:%M:%S.txt", now);
strftime(file_day, 80, "%Y-%m-%d_transactions.txt", now);

file_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.");
    }
}

你构建的方式file_date你会得到一个特殊的字符(|:)进入其中。系统不允许创建文件可能就足够了。

例如,在窗口外壳中,我得到:

C:\test>echo foo> a:2.txtLe chemin d'accès spécifié est introuvable.

Path not found的法语错误消息)。

AFAIK :用于记录 Windows 文件中的流(参考 Windows 开发人员中心) 摘录 :

流的命名约定

从 Windows shell 命令行指定时,流的全名是"文件名:流名称:流类型",如以下示例所示:"myfile.dat:stream1:$DATA"。

相关文章: