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

Вниз

Режим доступа к ТЕКСТОВОМУ файлу   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
7-1080714655
c13prog
2004-03-31 10:30
2004.05.23
Как определить название диска в CD-ROM?


4-1081139547
juiceman
2004-04-05 08:32
2004.05.23
Хук на клавиатуру и мышь


8-1078912912
$tranger
2004-03-10 13:01
2004.05.23
GIF-картинки


1-1084361305
lehich
2004-05-12 15:28
2004.05.23
цикл DateTime


1-1084199356
glGLU
2004-05-10 18:29
2004.05.23
Edit & randomize