Форум программистов, компьютерный форум CyberForum.ru

fstream не записывает данные в файл - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
11.10.2013, 03:48     fstream не записывает данные в файл #1
Если к примеру открываю файл так :
C++
1
2
fstream io;
io.open("test.txt");
то читает из файла хорошо, если при этом не записывать ничего. Скажем есть цикл и в нем getline извлекает строку, потом строка модифицируется остальным кодом и записывается обратно в тот же файл и на тоже место. Так вот такая запись все ломает и в файл ничего не записывается и читает только 60 строчек из 1000, а если убрать запись, то все читается снова же нормально. Но если писать в тот же файл на то же место, но с другим объектом, то все ок. Вот так к примеру :
C++
1
2
3
4
fstream io
fstream io2;
io.open("test.txt");
io.open("test.txt");
В чем же проблема?
Знаю про ifstream и ofstream, но хочу fstream.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.10.2013, 05:42     fstream не записывает данные в файл #2
C++
1
fstream io("test.txt");
Система тут такая: чтобы перейти от чтения к записи, нужно или отсоединить файл от потока и опять соединить , или указать, через seekp, куда записывать. После записи, к чтению, можно сразу переходить (но не забыть очистить буфер (flush()), чтобы запись попала в файл).
И не забывать, при достижении конца файла, сбрасывать флаги потока, иначе поток нерабочий, и никакие действия с потоком не будут выполняться.
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
12.10.2013, 12:46  [ТС]     fstream не записывает данные в файл #3
alsav22, А какие флаги, если я их не устанавливал?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 12:49     fstream не записывает данные в файл #4
Например, флаг eof. Установится при достижении конца файла.
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
12.10.2013, 14:04  [ТС]     fstream не записывает данные в файл #5
alsav22, Все ровно не пойму как нужно сделать. Не могли бы вы на примере моего кода объяснить что в нем нужно изменить, чтобы он заработал правильно. Из кода все лишнее вырезал, вообщем вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{   
fstream io;
string str_file;
io.open("D:\\2.srt");
 
 
while(io)
{
    getline(io, str_file);
 
    static int ic = 0;
    cout << endl << ic++ << endl;
    str_file.push_back('\n');
    io.write(str_file.c_str(), str_file.size());
}
 
system("pause");
}
И вот файл 2.rar
Если закомментировать io.write , то все кажется работает нормально и 3992 раз входит в цикл, то есть равное количеству строк в файле, но а если оставить запись, то будет всего 232 вхождения в цикл. Наверное там ещё проблемы есть, которые вы объясняли, но что-то я не сообразил.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 14:53     fstream не записывает данные в файл #6
Если вы хотите считать строку, изменить её, и записать на то же место, то изменённая строка должна быть по размеру равна начальной. Если нет, то нужно записывать в другой файл.

Добавлено через 4 минуты
В файле нет строк в обычном понимании. Там коды символов идут подряд. Теперь подумайте, как при этом может происходить вставка.
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
12.10.2013, 15:54  [ТС]     fstream не записывает данные в файл #7
Остальной код не модифицирует её в плане увеличения размера. Там просто циклом заменяются символы на другие, но не добавляются новые и тот код не важен в данный момент, потому что не работает именно эта часть что описал, так как мне не понятно из-за какой такой проблемы количество входов в цикл сокращается с 3992 до 232. Могли бы вы просто исправить код, который выше, чтобы он был рабочим, при этом не добавляя новый поток, а так как вы говорили с использованием flush seekp и сбросом флагов?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2013, 17:02     fstream не записывает данные в файл
Еще ссылки по теме:

C++ Fstream не видит файл
C++ Как создавать файлы dat и вводить в них данные (при помощи fstream)?
C++ Запись в файл fstream

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 17:02     fstream не записывает данные в файл #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{   
    fstream io;
    string str_file;
    io.open("D:\\2.srt");
    int i = 0;
    while(getline(io, str_file))
    {
        
        static int ic = 0;
        cout << endl << ic++ << endl;
        str_file.push_back('\n');
        io.seekp(i);
        io << str_file;
        //io.write(str_file.c_str(), str_file.size());
        i = io.tellg();
        io.flush();
    }
    io.close();
 
    system("pause");
    return 0;
}
Yandex
Объявления
12.10.2013, 17:02     fstream не записывает данные в файл
Ответ Создать тему
Опции темы

Текущее время: 20:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru