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

Вниз

Ошибка чтения файла при использовании PStream   Найти похожие ветки 

 
Lari   (2006-10-25 08:24) [0]

Использую PStream для чтения бита из exe-шника самой программы, при этом если после указанного чтения провести чтение стандартными функциями API из другого файла находящегося в допустим в этой же дирестории (1.txt) происходит ошибка. Переменная используемая для получения информации (в моем случае rf) получает какое-то левое значение и после чтения файла в конец полученной из файла строки добавляется какой-то дополнительный символ.

Текст программы

program Prog;

uses Windows, kol;

var
Msg: TMsg;
ps: PStream;
s: byte;

function rFile() : String;
var   hfl : HFile;
     size : dword;
     rf : PChar;
     ofs : OFSTRUCT;
begin
Result := "";
GetMem(rf,256);
hfl := OpenFile("1.txt",ofs,OF_READ);
ReadFile(hfl,rf^,255,size,nil);
Result := rf;
FreeMem(rf);
CloseHandle(hfl);
end;

Begin

ps := NewReadWriteFileStream(ParamStr(0));
ps.Seek($10,spBegin);
ps.Read(s,sizeof(s));
ps.Free;

MessageBox(0,PChar(rFile),0,0);

exit;

while GetMessage( Msg, HInstance, 0, 0) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end.



Если же закоментировать четыре строки

{
ps := NewReadWriteFileStream(ParamStr(0));
ps.Seek($10,spBegin);
ps.Read(s,sizeof(s));
ps.Free;
}

то чтение из текстового файла просиходит нормально.

Подсткажите пожалуйста почему происходит такая ошибка и как ее можно устранить.


 
Thaddy   (2006-10-25 09:58) [1]


function rFile() : String;
var   hfl : HFile;
    size : dword;
    rf : PChar;
    ofs : OFSTRUCT;
begin
Result := "";
GetMem(rf,256);//<-------------You allocate dirty memory of 256 bytes
hfl := OpenFile("1.txt",ofs,OF_READ);
ReadFile(hfl,rf^,255,size,nil);<---------- you read only 255:
//No wonder there"s an extra random byte!
Result := rf;
FreeMem(rf);
CloseHandle(hfl);
end;

Try rf:=Allocmem(255{or 256 if you want});
It uses clean memory.
The readfile function does not automatically convert to a pchar so the last byte of your buffer is undefined.


 
Vedun   (2006-10-25 12:02) [2]

Что такое $10 в аргументах метода Seek?


 
nicesc   (2006-10-25 14:38) [3]

$  -это 16ричное представление числа
$1 - 1в десятичной
..
$a - 10
..
$10 - 16


 
Vedun   (2006-10-25 15:13) [4]

Я это знаю. Я имел в виду другое. Неверно выразился. Ладно, проехали.


 
Lari   (2006-10-26 08:18) [5]

Спасибо, Thaddy, использование функции FillChar (Allocmem) решило вопрос.



Страницы: 1 вся ветка

Текущий архив: 2007.06.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
15-1179179108
PHPdeveloper
2007-05-15 01:45
2007.06.10
FF и js


1-1176710467
OlegMV
2007-04-16 12:01
2007.06.10
Мерцание TListView


3-1174465590
nick_van_rijn
2007-03-21 11:26
2007.06.10
тормоза при исполнении множественных запросов


15-1179301601
Knight
2007-05-16 11:46
2007.06.10
Плагины в dll...


1-1176290081
delphi_
2007-04-11 15:14
2007.06.10
авторизация с TWebBrowser используя логин и пароль