powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / fflush не работает !!! fwrite и fread с одним файлом, поочередно, в одном потоке
3 сообщений из 3, страница 1 из 1
fflush не работает !!! fwrite и fread с одним файлом, поочередно, в одном потоке
    #38412527
Игаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подсобите пожалуйста!
fflush не работает
Выполняю в одном потоке, с одним и тем же файловым поток fread и fread, поочередно.
Записываются, но не считываются данные.

Вот пример кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
BYTE buff1[10],buff2[10];
 memset(buff1,'*',10);

 FILE *F;
 if(fopen_s(&F,"test.dat","wb")!=0){std::cout<<"open error="<<GetLastError()<<endl;return;}

 if(fwrite(buff1,10,1,F)!=1){std::cout<<"write error="<<GetLastError()<<endl;return;}
 
 if(fflush(F)!=0){std::cout<<"flush error="<<GetLastError()<<endl;return;}

 if(fread(buff2,10,1,F)!=1){std::cout<<"read error="<<GetLastError()<<endl;return;}

 std::cout<<(memcmp(buff1,buff2,10)?"No":"Yes")<<endl;
 
 fclose(F);



Если после записи, перед чтением закрыть и открыть файл - всё ок
...
Рейтинг: 0 / 0
fflush не работает !!! fwrite и fread с одним файлом, поочередно, в одном потоке
    #38412540
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"wb+" и fseek вместо fflush
...
Рейтинг: 0 / 0
fflush не работает !!! fwrite и fread с одним файлом, поочередно, в одном потоке
    #38412876
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Sla"wb+" и fseek вместо fflush

fseek ВМЕСТЕ с fflush, после.

(Хотя, да, в общем, flush не нужен, поскольку доступ идёт через один и тот же файловый дескриптор. Но может он нужен для ещё каких-то целей).

После записи указатель файла передвигается за последний записанный байт.
Попытка чтения приведёт к тому, что будут пытаться читаться данные за концом файла.
Надо делать fseek на начало файла.

Кстати, STD-функции потоков имеют ровно обратную особенность -- там указатели чтения и записи в файл разные.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / fflush не работает !!! fwrite и fread с одним файлом, поочередно, в одном потоке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]