Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

FileOpen [D6, Win2k]


Лохматый ©   (2002-08-21 10:13:00) 

Господа! Пардон за назойливость, но очень требуется помощь. Итак... Существует ли возможность построчночитать данные из текстового файла, открытого командой FileOpen(FileName, fmOpenRead)?


Лохматый   (2002-08-23 11:50:00) [1]

Всем ПАСИ-И-И-БА !!!
Особенно Alex4444444444 ;)


Alex4444444444   (2002-08-23 11:30:00) [2]


StringList.Text := FileReadSTring("MyFile");

function FileReadString(const Path: string): string;
var Handle: integer;
Size: integer;
begin
Result := "";
// Size := 0;
Handle := FileOpen(Path, fmOpenRead or fmShareDenyNone);
if Handle <= 0 then Exit;
Size := FileSeek(Handle, 0, 2);
if Size > 0 then begin
SetString(Result, nil, Size);
FileSeek(Handle, 0, 0);
if FileRead(Handle, Result[1], Size) <> Size
then Result := "";
end;
FileClose(Handle);
end;


Anatoly Podgoretsky   (2002-08-23 10:22:00) [3]

Загонять надо не методами StringList а любыми другими, которые позволяют указывать режим доступа, а вот результат можно поместить в StringList.Text


Лохматый   (2002-08-23 10:14:00) [4]

Народ! Выручайте!
Файл нормально открывается толькокомандой FileOpen. Соответственно, получаю хэндл файла. Каким образом, используя его, забросить все строки в StringList или Memo?


Erik Ivanov   (2002-08-21 12:48:00) [5]

TFileStream.Create(const FileName: string; Mode: Word);
Mode = fmOpenRead


Лохматый   (2002-08-21 12:17:00) [6]

2Skier
Да не грузится он!!! Поскольку уже открыт


Skier   (2002-08-21 11:56:00) [7]

>Лохматый
А зачем хэндл файла?
Достаточно имени StringList.LoadFromFile(...)


Alx2   (2002-08-21 11:55:00) [8]

За открытие файла отвечает следущее:
function TextOpen(var t: TTextRec): Integer;
ее код можно посмотреть в rtl.

обрати внимание на структуру (то же самое, что и text):

{ Text file record structure used for Text files }
PTextBuf = ^TTextBuf;
TTextBuf = array[0..127] of Char;
TTextRec = packed record (* must match the size the compiler generates: 460 bytes *)
Handle: Integer; (* must overlay with TFileRec *)
Mode: Word;
Flags: Word;
BufSize: Cardinal;
BufPos: Cardinal;
BufEnd: Cardinal;
BufPtr: PChar;
OpenFunc: Pointer;
InOutFunc: Pointer;
FlushFunc: Pointer;
CloseFunc: Pointer;
UserData: array[1..32] of Byte;
Name: array[0..259] of Char;
Buffer: TTextBuf;
end;

Вообще, можно подсунуть свой вариант для TextOpen и открыть файл "по-своему". Либо все-таки подменить handle.


Лохматый   (2002-08-21 11:49:00) [9]

2Turalyon
К сожалению, не помогло. Спасибо за участие.

2Anatoly Podgoretsky
Своя оболочка - это слишком радикальный подход в данном случае ;) А вот каким образом загнать строки в StringList, имея хэндл файла? Будьте любезны чуть подробнее, если не в напряг...


Alx2   (2002-08-21 11:33:00) [10]

Рассмотри подробнее, что сидит в типе text. может быть, удастся подменить хэндл и после этого начать работать с readln...


Anatoly Podgoretsky   (2002-08-21 11:18:00) [11]

Построчно нет, это для двоичных файлов, надо или писать свою оболочку или загнать все строки в StringList тогда сможешь ими оперировать как со строками


Turalyon   (2002-08-21 11:12:00) [12]

Вот нашел в ФАКе почитай... может поможет...
http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988620750&n=15


Лохматый   (2002-08-21 11:05:00) [13]

2Turalyon
Увы...: Project ... raised exception class EFOpenError with message "Cannot open file ..."


Turalyon   (2002-08-21 10:47:00) [14]

var
StList : TStringList;

StList := TStringList.create;
try
StList.LoadFromFile("filename");
// здесь берешь построчно что тебе надо из StringList-а
finally
Msg.Free;

На сколько я помню... так можно читать даже из открытого файла..
Посмотри ФАК на этом сайте, там было что то о чтение из открыого фалйа...


Лохматый   (2002-08-21 10:35:00) [15]

2Tokha
Не проще. Поскольку файл открыт для записи другой программой :(


Tokha   (2002-08-21 10:23:00) [16]


Не проще ли для текстовогофайла воспользоваться:


procedure ReadByString;
var
F : TextFile;
SomeString : string;
begin
...
AssignFile(F, "filename.txt");
Reset(F);
...
Readln(F, SomeString);
...
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо