Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.02;
Скачать: CL | DM;

Вниз

Открытие файла только для чтения   Найти похожие ветки 

 
smok_er   (2002-12-20 14:24) [0]

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


 
Skier ©   (2002-12-20 14:58) [1]

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


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

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


 
Delirium^.Tremens ©   (2002-12-20 15:33) [3]

Oh, yea.


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

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


 
}{enon ©   (2002-12-20 15:57) [5]

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

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

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


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

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

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


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

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


 
han_malign ©   (2002-12-20 16:32) [8]

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


 
han_malign ©   (2002-12-20 16:35) [9]

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


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

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


 
han_malign ©   (2002-12-20 17:34) [11]

Хотя в 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;



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

Текущий архив: 2003.01.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
1-1814
gagarkin
2002-12-20 11:21
2003.01.02
По поводу TypeLib Editor а


14-1874
DennisL
2002-12-13 11:48
2003.01.02
Иконки для кнопок состоящие из четырех частей ?


6-1852
romych
2002-11-05 14:10
2003.01.02
Нужна помощь, совет


14-1880
vopros
2002-12-12 12:20
2003.01.02
У меня сегодня рабочий день


3-1760
Eduard
2002-12-11 15:23
2003.01.02
Проблема MSAccess и BDE