当试图像这样一个接一个地打开两个文件时:
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);
答案 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>的