Главная страница
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.024 c
11-1161345725
Thaddy
2006-10-20 16:02
2007.06.10
Vista OpenSaveDialog


15-1179042617
Ravshan
2007-05-13 11:50
2007.06.10
C++ Файловые потоки: read, write. Странные вещи происходят.


15-1179109163
Slider007
2007-05-14 06:19
2007.06.10
С днем рождения ! 12 мая


15-1179406156
Kerk
2007-05-17 16:49
2007.06.10
Заполните пропуски и назовите автора :)


15-1179231364
leonidus
2007-05-15 16:16
2007.06.10
Ищу толковую статью по проектированию БД