Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
ВнизFileOpen Найти похожие ветки
← →
Лохматый (2002-08-21 10:13) [0]Господа! Пардон за назойливость, но очень требуется помощь. Итак... Существует ли возможность построчно читать данные из текстового файла, открытого командой FileOpen(FileName, fmOpenRead)?
← →
Tokha (2002-08-21 10:23) [1]
Не проще ли для текстового файла воспользоваться:
procedure ReadByString;
var
F : TextFile;
SomeString : string;
begin
...
AssignFile(F, "filename.txt");
Reset(F);
...
Readln(F, SomeString);
...
end;
← →
Лохматый (2002-08-21 10:35) [2]2Tokha
Не проще. Поскольку файл открыт для записи другой программой :(
← →
Turalyon (2002-08-21 10:47) [3]
var
StList : TStringList;
StList := TStringList.create;
try
StList.LoadFromFile("filename");
// здесь берешь построчно что тебе надо из StringList-а
finally
Msg.Free;
На сколько я помню... так можно читать даже из открытого файла..
Посмотри ФАК на этом сайте, там было что то о чтение из открыого фалйа...
← →
Лохматый (2002-08-21 11:05) [4]2Turalyon
Увы...: Project ... raised exception class EFOpenError with message "Cannot open file ..."
← →
Turalyon (2002-08-21 11:12) [5]Вот нашел в ФАКе почитай... может поможет...
http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988620750&n=15
← →
Anatoly Podgoretsky (2002-08-21 11:18) [6]Построчно нет, это для двоичных файлов, надо или писать свою оболочку или загнать все строки в StringList тогда сможешь ими оперировать как со строками
← →
Alx2 (2002-08-21 11:33) [7]Рассмотри подробнее, что сидит в типе text. может быть, удастся подменить хэндл и после этого начать работать с readln...
← →
Лохматый (2002-08-21 11:49) [8]2Turalyon
К сожалению, не помогло. Спасибо за участие.
2Anatoly Podgoretsky
Своя оболочка - это слишком радикальный подход в данном случае ;) А вот каким образом загнать строки в StringList, имея хэндл файла? Будьте любезны чуть подробнее, если не в напряг...
← →
Alx2 (2002-08-21 11:55) [9]За открытие файла отвечает следущее:
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.
← →
Skier (2002-08-21 11:56) [10]>Лохматый
А зачем хэндл файла?
Достаточно имени StringList.LoadFromFile(...)
← →
Лохматый (2002-08-21 12:17) [11]2Skier
Да не грузится он!!! Поскольку уже открыт
← →
Erik Ivanov (2002-08-21 12:48) [12]TFileStream.Create(const FileName: string; Mode: Word);
Mode = fmOpenRead
← →
Лохматый (2002-08-23 10:14) [13]Народ! Выручайте!
Файл нормально открывается только командой FileOpen. Соответственно, получаю хэндл файла. Каким образом, используя его, забросить все строки в StringList или Memo?
← →
Anatoly Podgoretsky (2002-08-23 10:22) [14]Загонять надо не методами StringList а любыми другими, которые позволяют указывать режим доступа, а вот результат можно поместить в StringList.Text
← →
Alex4444444444 (2002-08-23 11:30) [15]
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;
← →
Лохматый (2002-08-23 11:50) [16]Всем ПАСИ-И-И-БА !!!
Особенно Alex4444444444 ;)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c