Ofstream не пишет в файл

Тема в разделе "Общие вопросы по С и С++", создана пользователем Sporco, 2 июн 2011.

Статус темы:
Закрыта.
  1. Sporco

    Sporco Гость

    У меня есть форма, в которой вводятся данные для расчёта. Эти данные можно ввести вручную или прочитать из файла, а также записать в файл, всё работает нормально.

    После расчета выводится вторая форма, в которой отображены результаты расчетов. Мне нужно сохранить эти результаты.

    Если перед сохранением результатов считать данные из файла в первую форму (при вводе данных), то сохранения не происходит. В функцию сохранения входит, но в файл ничего не записывает. Если же перед сохранением ничего не считывать и данные вводить вручную, то записывает. Пытался найти объяснение гугле, но ничего найти так и не смог...

    Код функции, которая должна сохранять результаты:

    Код (C++):
    void SaveResultInFile(void)
    {
    //Описание данных
    ofstream F;

    //Открытие файла для записи
    F.open("result.txt",ios::app);

    //Сохранение данных
    F<<"SaveResult";

    //Закрытие
    F.close();
    }
    Может кто-нибудь знает что надо сделать, чтобы запись происходила?
     
  2. ierofant

    ierofant Гость

    Попробуйте:
    Код (C++):
    F.open("result.txt", ios::app | ios::out);
     
  3. Sporco

    Sporco Гость

    К сожалению также не работает.

    Вставил после открытия файла код

    Код (C++):
    if(!F) ShowMessage("Ошибка открытия");
    Ошибки не выдает, следовательно, как понимаю, файл он открывает и с потоком связывает.

    Вывел в watch то, что содержится в потоке:

    Как понимаю, и в поток он помещает то, что надо. Правда настораживает, что первая буква пропала...

    А дальше идет операция закрытия файла... Не могу понять почему не записывает...

    UPD: Все-таки файл похоже не открывает... удалил файл result.txt и запустил. Должен был создать файл, но этого не произошло. Значит проблема где-то месте создания/связки файла и потока.

    UPD2: Удалил файл и вставил GetLastError. Возвращает 183-ю ошибку (Cannot create a file when that file already exists.), хотя файла нет! Если данные не считывать из файла в первой форме, то возвращает 0 и файл создает. В полном тупике. o_O

    UPD3: Попробовал повставлять эту функцию сохранения в разные части кода, заметил, что она работает только до вызова OpenDialog при считывании данных:

    Код (C++):
    void __fastcall TfmEnter::mmLoadClick(TObject *Sender)
    //Функция для загрузки данных из файла
    {
    //SaveResultInFile();  тут еще работает

    //Открытие окна диалога
    odForListOfDates->Execute();

    //SaveResultInFile();  тут уже не работает

    //Выбор файла с данными
    FileNameOfDates=odForListOfDates->FileName;

    //Загрузка
    ReadDatesFromFile(); //но эта функция работает нормально, хотя в ней тоже используeтся поток (ifsteam)
    }
     
  4. ierofant

    ierofant Гость

    Попробуйте писать полный путь к файлу.
     
  5. Sporco

    Sporco Гость

    Да! Заработало! В папке, где хранились данные нашел result.txt, со всеми своими предыдущими тестами. OpenDialog похоже задавал папку с данными как папку в которую надо сохранять файл с результатами

    Спасибо огромное за помощь! :(

    Зато на всю жизнь запомнил! )
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей