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

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

Открытие файла только для чтения [D6, Win2k]


smok_er ©   (2002-12-20 14:24:00) 

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


han_malign   (2002-12-20 17:34:00) [1]

Хотя в Stream тоже нет функции чтения строки из текстового файла

function fReadLn(var aF): String;
var ch: char;
_F: file of char absolute aF;
begin
if(EOF(_F))then exit;
Result:="";
repeat read(_F,ch) until(EOF(_F)or(ch=#10));//пропускаем CR
While((not EOF(_F))and(ch<>#13))do begin
Result:=Result+ch;
read(_f,ch);
end;
end;
var F: file of char;
s: string;
begin
FileMode:=0;
AssignFile(F,FileName);
{$I-}Reset(F);{$I+}
if(IOResult<>0)then exit;
while not EOF(F) do begin
s:=fReadLn(F);
...............
end;
end;


han_malign   (2002-12-20 16:35:00) [2]

Возморжно дествительно лучше пользоваться TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);


smok_er   (2002-12-20 16:35:00) [3]

МОжно пример?


han_malign   (2002-12-20 16:32:00) [4]

Да, действительно,если посмотреть в Assign.asm и OpenText.asm, для текстовых файлов(F: Text;) по Reset выставляется только FILE_SHARE_READ, на запись доступ не открывается(хотя это странно), FileMode игнорируется. Единственное решение работать с байтовым файлом(F: file of byte;), как описано выше, и парсить строки самому(по #13,#10).


smok_er   (2002-12-20 16:11:00) [5]

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


han_malign   (2002-12-20 15:58:00) [6]

> Лучше используй TFileStream...
- меня всегда убивало злоупотребление потоками, Stream-ы актуальны в контексте наследников TPersistent, в остальных случаях - это стрельба из пушки по воробъям.

FileMode:=0;//Default 2
Reset(F);
Открывается только на чтение с FILE_SHARE_READ or FILE_SHARE_WRITE.


}{enon   (2002-12-20 15:57:00) [7]

procedureUseMyFile(name: string);
var
f: textfile; {Не помню тип переменной...}
begin
assignfile(f,name);
reset(f);
..........
closefile(f);
end;

Если вместо reset использовать append, то остальные программы смогут только читать этот файл.

З.Ы. Я это писал давно, могу ошибаться :(


smok_er   (2002-12-20 15:51:00) [8]

Delirium^.Tremens, пример можно?


Delirium^.Tremens   (2002-12-20 15:33:00) [9]

Oh, yea.


smok_er   (2002-12-20 15:30:00) [10]

Основное требование - чтение не всего файла, а построчно, дабы не забивать память, которой всегда мало :). К тому же, размер файла неизвестен. Теоретически, он может весить и 50 метров и больше.
TFileStream предоставляет такие возможности?


Skier   (2002-12-20 14:58:00) [11]

>smok_er
Лучше используй TFileStream...


Наверх

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