Форум: "Основная";
Текущий архив: 2003.01.02;
Скачать: [xml.tar.bz2];
ВнизОткрытие файла только для чтения Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c