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

Вниз

Дважды открыть файл (RW и R режимы).   Найти похожие ветки 

 
Alexey (AZ)   (2007-04-01 18:41) [0]

Здравствуйте.
Возникла небольшая заминка по поводу совместного использования доступа. Открываю файл ч/з :
TFileStream.Create(DBName,fmOpenReadWrite,fmShareDenyRead);
Так файл пишется, а затем его же из этого же приложения надо быстро читать и поэтому использую TMemoryStream.LoadFromFile, но делфи страшно ругается. Сейчас поясню зачем так. Нужно постепенно записывать в файл понемногу ч/з определенные промежутки времени, а затем быстро переиндексировать содержимое, тоже в опр. моменты времени, но не синхронно, т.е. в одном потоке. Соответственно, ничего лучше чем загрузить разом в MemoryStream и по-быстрому перечитать там его, я не придумал.

Предложите плз человеческие методы. В несколько строк желательно, дабы без извратов. BDS2006, TurboDelphi. Кстати, справка в нем - гуано.


 
Anatoly Podgoretsky ©   (2007-04-01 18:43) [1]

> Alexey (AZ)  (01.04.2007 18:41:00)  [0]

Ты сам запретил его читать - fmShareDenyRead


 
Alexey (AZ)   (2007-04-01 18:51) [2]

Извините, просто ошибся. Конечно же fmShareDenyWrite там должно быть. результат тот же =( Ошибки доступа.


 
Alexey (AZ)   (2007-04-01 18:58) [3]

GetLastError сообщает ERROR_SHARING_VIOLATIONS =(


 
Desdechado ©   (2007-04-01 19:08) [4]

> тоже в опр. моменты времени, но не синхронно, т.е. в одном потоке.
Закрываешь первый, открываешь второй.
Хотя для fmOpenReadWrite это не нужно. Можешь прямо в нем опять перечитывать и "индексировать".


 
Anatoly Podgoretsky ©   (2007-04-01 19:14) [5]


> GetLastError сообщает ERROR_SHARING_VIOLATIONS =(

Значит открывается в режиме чтения/записи, если вообще не монопольно.


 
Alexey (AZ)   (2007-04-01 19:16) [6]

Дело в том, что затребовать этот файл из одного потока могут разные объекты - один будет только записывать, другой - только читать. Причем, эти объекты ничего не знают о существовании друг друга. А открывать для объекта1 и закрывать, а затем открывать для объекта2 и закрывать* и так в цикле по 100 раз на секунду, это не эффективно.
*Т.е. объект1 всегда _держит_ файл открытым и пишет, а объект 2 мгновенно считывает (т.к. унаследован от TMemoryStream) и соответственно _не_держит_ файл.


 
Alexey (AZ)   (2007-04-01 19:18) [7]


> Anatoly Podgoretsky ©   (01.04.07 19:14) [5]

К сожалению отладка подтверждает, что:
Access = GENERIC_READ|GENERIC_WRITE
ShareMode = FILE_SHARE_READ
Mode = OPEN_EXISTING


 
Desdechado ©   (2007-04-01 21:55) [8]

>  но не синхронно, т.е. в одном потоке.
>  всегда _держит_ файл открытым и пишет,
Где правда?
Эти 2 мысли противоречат друг другу.


 
Alexey (AZ)   (2007-04-02 14:29) [9]

Нет. Вот так:
for ... do begin
Обект1-> пишет.
Объект2->читает.
end;
Каждый объект держит свой файл. Открывать и закрывать для каждого объекта не желательно.
Т.е. упростим задачу. Можно не открывать файл повторно, а как-то указать что файл открыт и из него можно читать.



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

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

Наверх




Память: 0.46 MB
Время: 0.039 c
2-1175691550
КПД
2007-04-04 16:59
2007.04.22
Вопрос по DBComboBox


2-1175628110
Андрей.А.В.
2007-04-03 23:21
2007.04.22
записать предложения в тексте в обратном порядке (1-е предложен


15-1174738380
Углук
2007-03-24 15:13
2007.04.22
Как сменить окно частот в БПФ?


15-1174819383
Логин
2007-03-25 14:43
2007.04.22
Реклама на сайте


2-1175587955
npu3pak
2007-04-03 12:12
2007.04.22
Автоматическое обновление текстовых полей





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский