我正在尝试编写将数据附加到文件的末尾,并使用seekp(streamoff off,ios_base :: seekdir dir)函数,但它不会附加,不知何故它将数据写入中间的文件。 我试着像这样添加打开文件 - file.open(resultFile,fstream :: in | fstream :: out); (正如其他类似帖子所建议的那样)虽然我仍然得到相同的输出。 这就是代码:
bool Manager::ValidCommand(Command* com, ofstream &ResultFile) const
{
Employee::DepartmentEn dept = Employee::InvalidDepartment;
if (com == NULL)
return false;
if(com->GetFunction() <Command::PrintCityCouncilList || com->GetFunction() > Command::HireEmployee){
ResultFile.seekp(0,ios::end);
ResultFile << "Command:Failed activating function - invalid function number\n";
return false;}
if ((com->GetFunction() == Command::PrintDepartmentEmployees) || (com->GetFunction() == Command::PrintDepartmentExpenses) || (com->GetFunction() == Command::PrintDepartmentStatistics)){
dept = com->GetDepartment();
if((pcc->FindDepartment(dept) == NULL )|| (dept < Employee::Engineering) ||(dept > Employee::Sanitation))
{
ResultFile.seekp(0,ios::end);
ResultFile << "Command:Failed activating function - invalid department \n";
return false;
}
}
return true;
}
我可能做错了什么?
答案 0 :(得分:0)
代码中引用的变量 pcc
在做什么?
if((pcc->FindDepartment(dept) == NULL ) .....))
{ .... }
击> <击> 撞击>
因此,有关C ++文件输入/输出here和引用
的文档os :: app所有输出操作都在文件末尾执行,并将内容附加到文件的当前内容。此标志只能在打开的流中用于仅输出操作。
这意味着,如果同时指定了输入/输出模式,则追加将无法工作......您能确认一下吗?如果是这种情况,可能值得忘记在文本模式下打开,而是使用二进制模式....
另一件事 - 文件肯定是开放的,你可以启用寻找,ResultFile.seekp(...)
?通过闪烁调试消息来检查流的值:
if (ResultFile.bad()) cout << "Bad stream!\n";