Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];

Вниз

TFileStream   Найти похожие ветки 

 
ev   (2002-03-11 19:42) [0]

Подскажите, как грамотно завершить cеанс работы с TFileStream?
Т.е. я создаю файл, записываю в него, а потом?

"Free" плохо работает...


 
MBo   (2002-03-11 19:45) [1]

достаточно Free.
А насколько плохо? ;)


 
ev   (2002-03-11 19:51) [2]

У меня постоянно пишется данные (блоками).
Каждый блок: Create (открыть и дописать) - Write - Free.

При зависании системы или неожиданной перезагрузке все данные (с момента запуска программы) теряются.

А хочется, чтобы терялся только последний блок (который в тот момент записывался).


 
Anatoly Podgoretsky   (2002-03-11 20:19) [3]

Create, Write, Free, пауза до краха сколько?
При Free все данные записываются и файл закрывается, но данные на диск записываются с задержкой, все ли данные у тебя пропадают или только за несколько последних секунд.


 
MBo   (2002-03-11 20:31) [4]

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


 
Макс Черных   (2002-03-11 23:36) [5]

>MBo
Да хоть текстовый файл, хоть не текстовый. Хоть 100 потоков
с любым приоритетом. Дисковому кэшу OC (Smartdrive - в ДОСе),
а равно буферу самого НЖМД все это совершенно по барабану.


 
Stexen   (2002-03-12 00:06) [6]

я незнаю че тама делаетсья на процедуру фрии но я всегда еще сперва ему делал FileClose(FS.HAndle). правдо фрии потом моно не делать я так делале потому что юзать сразу нескоко файлов приходилось и поэтому вот так делал что б время не траить на креате


 
Anatoly Podgoretsky   (2002-03-12 00:16) [7]

Stexen © (12.03.02 00:06)
Это документировано в описании деструктора Destroy, именно закрытие указателя.


 
MBo   (2002-03-12 05:02) [8]

>Макс Черных
дело не только в кэше, но и в закрытии файла


 
ev   (2002-03-12 15:54) [9]

теряется вся информация, записанная за сеанс работы программы. А это несколько мегамайт!!! Как сделать, чтобы терялось только за последние несколько секунд?


 
Alx2   (2002-03-12 15:59) [10]

Сам не пробовал, но вдруг поможет FlushFileBuffers?


The FlushFileBuffers function clears the buffers for the specified file and causes all buffered data to be written to the file.

BOOL FlushFileBuffers(

HANDLE hFile // open handle to file whose buffers are to be flushed
);


 
ev   (2002-03-12 16:27) [11]

Спасибо попробую......

Есть еще идеи?


 
Макс Черных   (2002-03-12 17:02) [12]

>MBo
>дело не только в кэше, но и в закрытии файла
При чем тут закрытие файла? Может попробуете
привести какие нибудь аргументы?

>ev ©
Есть несколько способов решения проблемы:
1. Указанный Alx2 ©, т.е. FlushFileBuffers.
2. Открытие файла с помощью CreateFile c флагом FILE_FLAG_NO_BUFFERING
3. Запрещение кэширования записи Windows, так делает
по умолчанию Windows 2000 server

Может есть и другие способы, но я лично о них ничего не
слышал.


 
ev   (2002-03-12 23:02) [13]

Так если дело в кэше, то пропадет последние несколько записей (а не одна). Но у меня пропадает весь сеанс?!?!?!?


 
Макс Черных   (2002-03-12 23:24) [14]

Windows динамически управляет размером кэша.
Например, при наличии 64 Мб ОЗУ, что по нынешним меркам
не так уж и много, размер кэша будет как минимум 4Мб.
А это наверняка много больше нескольких записей БД.
Даже при самой плотной загрузке на 32 Мб ОЗУ, размер кэша
будет минимум 1 Мб. Большинство современных винтов имеет
буфер как минимум 512Кб, а зачастую больше. Так что выводы
делайте сами.


 
MBo   (2002-03-13 08:06) [15]

>При чем тут закрытие файла? Может попробуете
>привести какие нибудь аргументы?

сходная проблема
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1015949526&n=3



 
ev   (2002-03-13 12:49) [16]

дополение: пропадает - это при перезагрузке срулвыл находит ошибки и обрезает файлы!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
14-80666
Shuler
2002-02-03 12:44
2002.03.25
Не слабо?


6-80645
star
2002-01-04 12:54
2002.03.25
Как уловить момент подключения компьютера к интернету


6-80648
ShaH
2002-01-08 11:08
2002.03.25
Проблема с соединением сокетов


3-80393
Мефодий
2002-02-25 12:20
2002.03.25
Алгоритм для редактирования данных


1-80599
JibSkeart
2002-03-11 12:18
2002.03.25
Программно Добавить Итем и СабИтем в TTreeView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский