使用file.seekp的问题

时间:2010-09-11 23:40:11

标签: c++ visual-studio-2010

我正在尝试编写将数据附加到文件的末尾,并使用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;  
}

我可能做错了什么?

1 个答案:

答案 0 :(得分:0)

代码中引用的变量pcc在做什么?

if((pcc->FindDepartment(dept) == NULL ) .....))  
       {  ....   }

<击>

因此,有关C ++文件输入/输出here和引用

的文档
  

os :: app所有输出操作都在文件末尾执行,并将内容附加到文件的当前内容。此标志只能在打开的流中用于仅输出操作。

这意味着,如果同时指定了输入/输出模式,则追加将无法工作......您能确认一下吗?如果是这种情况,可能值得忘记在文本模式下打开,而是使用二进制模式....

另一件事 - 文件肯定是开放的,你可以启用寻找,ResultFile.seekp(...)?通过闪烁调试消息来检查流的值:

if (ResultFile.bad()) cout << "Bad stream!\n";