![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работаю с файлом при помощи ф-ций FileOpen FileRead FileWrite
старый маразматикЪ © (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 строке.