проблема с использованием file.seekp - PullRequest
1 голос
/ 12 сентября 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 голосов
/ 12 сентября 2010

Что делает переменная pcc, как указано в вашем коде?

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

В соответствии с этой документацией по вводу / выводу файла C ++ здесь и в кавычках

os :: app Все операции вывода выполняются в конце файла, добавляя содержимое к текущему содержимому файла.Этот флаг можно использовать только в потоках, открытых для операций только для вывода.

Это означает, что добавление не будет работать, если указан оба режима ввода / вывода ... Можете ли вы подтвердить это?Если это так, возможно, стоит забыть об открытии в текстовом режиме и использовать вместо него двоичный режим ...

Другое дело - действительно ли файл, который вы можете открыть для поиска, ResultFile.seekp(...)?Проверьте значение потока, высвободив отладочное сообщение примерно так:

if (ResultFile.bad()) cout << "Bad stream!\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...