
09.08.2009, 13:16
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами:
10097606
Репутация:
3349
|
|
Вот навоял функцию для чтения строк из файла на Win API с поддержкой Win и nix форматов файла.
Код:
function ReadString(h:THANDLE; var s:string; max:integer):boolean;
var
buf:pchar;
rb:dword;
p:dword;
begin
result := false;
getmem(buf, max);
ReadFile(h, buf^, max, rb, nil);
if rb > 0 then
begin
result := true;
p := pos(#10, string(buf));
if p = 0 then // если последняя строка
begin
s := string(buf);
end
else
begin
if (p > 1) and (buf[p-2] = #13) then // если Win формат
begin
s := copy(buf, 0, p-2);
end
else // если NIX формат
begin
s := copy(buf, 0, p-1);
end;
SetFilePointer(h, p - rb, nil, FILE_CURRENT);
end;
end;
freemem(buf);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
h:THANDLE;
s:string;
x:integer;
const
MAX_LEN = 256;
begin
h := CreateFile('e:\test.txt', GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
if h <> INVALID_HANDLE_VALUE then
begin
for x := 1 to 10 do
begin
if ReadString(h, s, MAX_LEN) then // читаем строку
begin // если считалась
memo1.Lines.Add('Строка ' + inttostr(x) + ' - ' + s);
end
else break; // прерывем цикл если нет больше строк
end;
CloseHandle(h);
end;
end;
|
|
|