Форум: "KOL";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];
ВнизОшибка чтения файла при использовании 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;
Tryrf:=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 вся ветка
Форум: "KOL";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.049 c