![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;