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