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

时间:2015-04-20 15:09:17

标签: 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.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);

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您构建file_date的方式会让您获得一个特殊字符(|:)。系统不允许创建文件可能就足够了。

例如在Windows shell中我得到:

C:\ test&gt; echo foo&gt;答:2.txt Le chemin d'accèsspécifiéestintrouvable。

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

AFAIK :用于将记录到Windows文件中(参见Windows Dev Center)摘录:

Streams的命名约定

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