Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.017 c
2-1179839213
_vl_
2007-05-22 17:06
2007.06.10
Перевод из строки в число


2-1179388526
Сергей_112233
2007-05-17 11:55
2007.06.10
простой вопрос


15-1179371529
vajo
2007-05-17 07:12
2007.06.10
Можно ли выявить с какого компьютера из сети идет спам?


1-1176716998
well
2007-04-16 13:49
2007.06.10
BDS. Как создать иконку если нет ImageEditor


2-1179597862
XPMan
2007-05-19 22:04
2007.06.10
Стиль окна




   Наверх