imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 14.05.2004, 12:40     # 1
Anthony
Newbie
 
Регистрация: 05.04.2004
Сообщения: 39

Anthony Путь к славе только начался
Как открыть файл?

Здравствуйте, господа программисты. Подскажите, кто чем может...

Имеется 2 программы: одна пишет в файл, другая - соответственно - читает. Делают они это через непредсказуемые промежутки времени, и вполне вероятно, что попытаются сделать одновременно.
Можно ли каким-либо образом в "читающей" программе (у "пишущей" необъяснимо исчезли исходники последних 14-и версий) открыть файл незаметно для "писателя"?
(В качестве более чем идеального примера могу привасти FAR'овский view'ер, который не только не блокирует view'ымый файл, но и периодически обновляет его содержимое)
Anthony вне форума  
Старый 14.05.2004, 12:50     # 2
ivahaev
::VIP::
шайтан-башка
 
Аватар для ivahaev
 
Регистрация: 31.03.2003
Адрес: imho.ws Тюменское отделение
Сообщения: 1 902

ivahaev СуперБогivahaev СуперБог
ivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБог
А на чем пишешь?
ivahaev вне форума  
Старый 14.05.2004, 13:11     # 3
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
А что за файл? ИМХО потоком открывай...
/7y3uK вне форума  
Старый 14.05.2004, 13:44     # 4
Anthony
Newbie
 
Регистрация: 05.04.2004
Сообщения: 39

Anthony Путь к славе только начался
Цитата:
Сообщение от ivahaev
А на чем пишешь?
На Delphi.
Цитата:
Сообщение от ivahaev
А что за файл
Обычный текстовый, с log'ами метров на 15-20...

А причем тут потоки (если я правильно понял)? Это и так 2 разных программы
Anthony вне форума  
Старый 14.05.2004, 19:39     # 5
albo
Advanced Member
 
Аватар для albo
 
Регистрация: 20.08.2003
Адрес: Москва
Пол: Male
Сообщения: 402

albo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царстве
Читай хелп по FileMode
albo вне форума  
Старый 15.05.2004, 00:14     # 6
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
2 Anthony
поток и процесс - несколько разные вещи...
Я к тому, что можно не держать файл открытым постоянно, а через промежутки времени или по флагу modify, или еще каким либо из способом потоком вытаскивать данные из файла например в другой файл или в компонент... не знаю как в дельфи (о позор мне) но вот в С есть fstream - файловый поток. Для текстовиков архи удобная весчь
/7y3uK вне форума  
Старый 18.05.2004, 12:04     # 7
Anthony
Newbie
 
Регистрация: 05.04.2004
Сообщения: 39

Anthony Путь к славе только начался
Cool

Код:
iFileHandle := FileOpen(LName, fmShareDenyNone);
и т.д. по тексту хелпа... Работает.

А не намекнет ли кто-нибудь, как средствами SysUtils сотворить что-то подобное ReadLN?
Anthony вне форума  
Старый 18.05.2004, 12:19     # 8
ivahaev
::VIP::
шайтан-башка
 
Аватар для ivahaev
 
Регистрация: 31.03.2003
Адрес: imho.ws Тюменское отделение
Сообщения: 1 902

ivahaev СуперБогivahaev СуперБог
ivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБогivahaev СуперБог
Anthony, вот вариант из DelphiWorld
Цитата:
Даже если файл открыт с низкими привелегиями (используя ReadOnly, ShareReadWrite) , иногда открытие уже открытого файла может приводить к ошибкам, особенно, если это файл интенсивно используется другим приложением. Самый простой способ решить эту проблемму - это использовать MemoryStream вместо непосредственного доступа к файлу:



Код:
var
  Memory: TMemoryStream;
begin
  Memory := TMemoryStream.Create;
  try
    Memory.LoadFromFile('DelphiWorld.dat'); // это он!!
    ...
    Memory.read(...); // Вы можете использовать методы чтения как у файлов
    Memory.Seek(...);
    FileSize := Memory.Size;
    ...
  finally
    Memory.Free;
  end;
end;


Данный способ никогда не открывает файл, а заместо этого создаёт копию его в памяти. Конечно Вы можете и записать в поток (Stream) в Памяти(Memory), но изменения не будут записаны на диск до тех пор, пока Вы не запишете их в файл (командой SaveToFile).
ivahaev вне форума  
Старый 18.05.2004, 13:51     # 9
Anthony
Newbie
 
Регистрация: 05.04.2004
Сообщения: 39

Anthony Путь к славе только начался
Цитата:
Memory.LoadFromFile('DelphiWorld.dat');
А вот так-вот я пробовал и Delphi все равно ругалась на то, что файл занят другим процессом:(
Anthony вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 03:28.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.