Главная страница
    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.003 c
3-1756
Opryshok
2002-12-11 14:26
2003.01.02
Как работать с набором данных в DataSet


3-1753
Teapot
2002-12-11 16:56
2003.01.02
Заблудился в трех соснах....


3-1750
andrewsanswer
2002-12-10 18:35
2003.01.02
Проблемы с Update


1-1798
Батник
2002-12-20 11:47
2003.01.02
Вопрос про батники в win98


1-1791
George3
2002-12-20 13:32
2003.01.02
Как из строки TfrmTest получить ссылку на класс TfrmTest





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский