Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.004 c
1-1829
Xai
2002-12-14 11:50
2003.01.02
Сохранение данных


14-1869
diww
2002-12-11 14:10
2003.01.02
возможно ли такое? чисто теоретически


6-1854
stikriz
2002-11-04 22:34
2003.01.02
TTcpClient


1-1820
Serg_ua
2002-12-20 20:39
2003.01.02
Hooks


1-1793
orion_st
2002-12-20 10:08
2003.01.02
Добавить таймер в TRxTimerList





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский