Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работаю с файлом при помощи ф-ций FileOpen FileRead FileWrite


Страницы:   1 2 3

старый маразматикЪ ©   (2005-04-15 11:18:00) 

Win2000Pro и иногда возникает ситуация, когда я файл закрываю, чтобы потом удалить, а винда говорит, что он не закрыт, не могу удалить(в 98 такого не было). или держит в буфере до последнего, и в случае отключения питания или перезагрузки последние изменения пропадают(иногда достаточно значительные), вместо них пишется просто кусок покореженной памяти.
может, кто встречался с таким, как бороться? ведь если я говорю FileWrite, то, по идее, я уверен, что данные записаны, однако это не так. они в буфере. и запишутся наверняка, если я открою этот-же файл из другого процесса.


ASMiD   (2005-04-15 14:59:00) [41]

А еще есть разница - куда писать. На хард - одно, на сетевой диск - совсем другое. И FlushFileBuffers не всегда помогает.


Набережных С.   (2005-04-15 14:58:00) [42]


> mgcr ©   (15.04.05 14:53) [17]

Честно говоря, я тебя не что-то никак не пойму:( Я что-то неправильно сказал? Что именно?


mgcr   (2005-04-15 14:53:00) [43]

Набережных С. ©   (15.04.05 14:51) [16]

Я полагаю, буратинизм мы не рассматриваем ? :) На этот случай тоже дана рекомендация :) Если злоумышленник нажмет reset на корпусе, тоже ведь не убережешься.


Набережных С.   (2005-04-15 14:51:00) [44]


> mgcr ©   (15.04.05 14:43) [15]

Ну правильно. Только это не гарантирует безопасность данных при внезапном вмшательстве Чубайса:) Вроде об этом говорилось в [0]:

> случае отключения питания или перезагрузки последние изменения
> пропадают(иногда достаточно значительные), вместо них пишется
> просто кусок покореженной памяти.

??

А "покореженный кусок" потому, что SetEndOfFile был выполнен.


mgcr   (2005-04-15 14:43:00) [45]

старый маразматикЪ   (15.04.05 14:37) [12]


> дык, после каждого чиха файлом хлоп-хлоп делать - оно не
> то. время тоже критично


Да оно по времени не сильно занимает. Насколько я понял, у тебя проблемы с тем, чтобы файл удалить, а незакрытый ты по-любому не удалишь.

А если питание вырубается и хрень пишется - ну эта...сам себе злобный буратино. Либо ставь УПС либо закрывай и переоткрывай файл после каждой записи.

Набережных С. ©   (15.04.05 14:38) [13]

Данные-то буферизуются. Но доступ к ним со любой стороны (хоть через файл, хоть через файл-маппинг) все равно идет через тот же буфер. Так что с точки зрения процессов данные после FileWrite записываются.


Набережных С.   (2005-04-15 14:40:00) [46]


> старый маразматикЪ   (15.04.05 14:37) [12]
> FlushFileBuffers поможет?

Должон, меня ни разу не подводил:) Но смотри [9].


Набережных С.   (2005-04-15 14:38:00) [47]


> mgcr ©   (15.04.05 14:32) [11]

Не совсем понял вопрос. Зря так думал потому, что данные буферизуются, если файл открыт с буферизацией. Эта информация не секретная. Именно поэтому и зря так думал. Ответил?


старый маразматикЪ   (2005-04-15 14:37:00) [48]


> mgcr ©   (15.04.05 13:05) [9]

дык, после каждого чиха файлом хлоп-хлоп делать - оно не то. время тоже критично


> Набережных С. ©   (15.04.05 14:21) [10]

дык, сам знаю, шо зря. неоднократно проверено.


> FILE_FLAG_NO_BUFFERING в CreateFile, но твоя проблема явно
> не здесь

а где? FlushFileBuffers поможет? поскоку реально мне эту фигню оттестить сложно. все достаточно непредсказуемо


mgcr   (2005-04-15 14:32:00) [49]

Набережных С. ©   (15.04.05 14:21) [10]


> Ну и зря.


Почему зря ?


Набережных С.   (2005-04-15 14:21:00) [50]


> ведь если я говорю FileWrite, то, по идее, я уверен, что
> данные записаны

Ну и зря.

> как заставить винду данные не буферизировать, хотя-бы

FILE_FLAG_NO_BUFFERING в CreateFile, но твоя проблема явно не здесь.


mgcr   (2005-04-15 13:05:00) [51]

Котик Бегемотик   (15.04.05 12:36) [7]

FileClose вообще-то вызывает эту функцию. Это так, к слову.


старый маразматикЪ   (2005-04-15 12:45:00) [52]


> Котик Бегемотик   (15.04.05 12:36) [7]

эта... надо спробовать. сенкс


Котик Бегемотик   (2005-04-15 12:36:00) [53]

может это ?
function FlushFileBuffers(hFile: THandle): BOOL; stdcall;


старый маразматикЪ   (2005-04-15 12:35:00) [54]


> mgcr ©   (15.04.05 12:28) [5]

я. и токо я. локально отлаживаю. не совсем шоб уж индеец. тем паче, что файл открываю в ексклюзивном режиме, для отсечения возможных непоняток. ест-но, я не напрямую эти ф-ции юзаю, там вокруг них оберка идет, но сводится, в итоге, к ним. вернее, к винде. насколько я понимаю.


mgcr   (2005-04-15 12:28:00) [55]

Может его не только ты открыл ? Посмотри Process Explorer'ом


старый маразматикЪ   (2005-04-15 12:21:00) [56]


> Alex Konshin ©   (15.04.05 12:12) [3]

я знаю эту шутку.
а более интересные мысли есть? как заставить винду данные не буферизировать, хотя-бы?


Alex Konshin   (2005-04-15 12:12:00) [57]

Хм... Эта шутка явно не старее старого маразматика, хотя и ходит еще со времен Фидо, т.е. ей не менее 10 лет.


старый маразматикЪ   (2005-04-15 11:45:00) [58]


> Alex Konshin ©   (15.04.05 11:21) [1]

конгениально! а я-то думаю... и про 17-ю строку - очень смешно. аж сполз под стол


Alex Konshin   (2005-04-15 11:21:00) [59]

Раз говорит, что не закрыт, значит, не закрыт.
А ошибка у тебя в 17 строке.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо