Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизРежим доступа к ТЕКСТОВОМУ файлу Найти похожие ветки
← →
Sla © (2004-05-07 09:38) [0]Подскажите как изменить режим доступа к сабжу?
Есть файл, уже открытый другой программой, я могу просмотреть его содержимое каким нить текстовым вьювером, но вот Reset(file) и последующий ReadLn(file) выдает ошибку. судя по всему он пытается получить монопольный доступ к файлу, что у него не получается.
Вот собсно мне нужно прочитать этот файл.
Переменная FileMode не работает для текстовых файлов.
Подскажите пожалуйста!
Заранее спасибо!
← →
[lamer]Barmaglot © (2004-05-07 09:40) [1]CreateFile?
← →
TUser © (2004-05-07 09:41) [2]Какую ошибку выдает? И удается ли его прочитать побайтно?
← →
Семен Сорокин © (2004-05-07 10:12) [3]TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
← →
Sla © (2004-05-07 10:19) [4]i/o error 32 выдает.
А можно как то читать из этого потока построчно?
Файл ОЧЕНЬ большой, порядка 50 мб, разбивать его на строки - уйдет слишком много времени....
← →
ASMiD © (2004-05-07 10:26) [5]На самом деле времени уйдет практически столько же как и при Readln поскольку ящик читает файл сначала в буфер, а потом проводит разбивку на строки и если строка не поместилась в буфере - читает следующий.
Мораль - делать то же самое самому.
← →
Семен Сорокин © (2004-05-07 10:38) [6]Sla © (07.05.04 10:19) [4]
так а что тебе стоит сделать TStringList и загрузить в него данные из TFileStream (через LoadFromStream)?
← →
Sla © (2004-05-07 10:40) [7]Что то не получается с потоками... никогда раньше не работал с ними, подскажите пожалуйста где тут ошибка?
var
f:TFileStream;
z: string;
begin
f:=TFileStream.Create("config.log", fmOpenRead or fmShareDenyNone);
f.Read(z,10);
Showmessage(z);
f.Free;
← →
Sla © (2004-05-07 10:42) [8]2 Семен Сорокин
Спасибо, я не знал что так можно. Как только разберусь с потоками - попробую.
← →
[lamer]Barmaglot © (2004-05-07 10:43) [9]f:=TFileStream.Create("config.log", fmOpenRead or fmShareDenyNone);
f.position:=0; ????
f.Read(z,10);
← →
Семен Сорокин © (2004-05-07 10:43) [10]Sla © (07.05.04 10:42) [8]
а вообще это не дело - ЛОГ в 50 Мб, нужно ограничивать как-то, разбивать, архивировать или еще что-то.
← →
Sla © (2004-05-07 10:52) [11]2 Семен Сорокин
Это понятно, дело в том что он и так разбивается...
Да и я думаю не принципиально, обрабатывать один файл на 50, или 5 файлов по 10 мб.
← →
Sla © (2004-05-07 10:54) [12]2 [lamer]Barmaglot
Не помогает... Access Violation говорит... :((
З.ы.
Народ, может кто заодно подскажет как быстрее всего обрабатывать файлы такой длины? Есть какие нибудь особые средства?
← →
ASMiD © (2004-05-07 10:54) [13]Не совсем.
Если будешь пользоваться TStringList и LoadFromFile - то есть существенная разница читать 1 раз 50метров или 5 раз по 10
← →
Sla © (2004-05-07 10:58) [14]TStringList.LoadFromFIle не подходит, т.к. не может прочитать файл. У него ведь не устанавливается режим чтения...
← →
Sla © (2004-05-07 11:07) [15]Нароод!
Ау, ну подскажите кто нить, плиз, почему вот это не пашет?
var
f:TFileStream;
z: string;
begin
f:=TFileStream.Create("config.log", fmOpenRead or fmShareDenyNone);
f.position:=0;
f.Read(z,10);
Showmessage(z);
f.Free;
← →
ASMiD © (2004-05-07 11:20) [16]Так не пойдет.
z - массив от 0 до 255 в 0 пишется длина строки!!
Поэтому, если хочешь f.Read(z,10); то
f.Read(z[1],10);
SetLength(z,10);
← →
Sla © (2004-05-07 11:28) [17]Проблема решена, всем спасибо!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.06 c