Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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;

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 вся ветка

Форум: "KOL";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.045 c
2-1179386405
ewer
2007-05-17 11:20
2007.06.10
bat-файл и программа на Pascal е


3-1174556149
dolmat
2007-03-22 12:35
2007.06.10
Изменение свойств поля


2-1179894522
allucard
2007-05-23 08:28
2007.06.10
Обяъсните неграмотному Packed Record


15-1179343459
raqy.style
2007-05-16 23:24
2007.06.10
А в чем разница?


2-1179854765
Prasal
2007-05-22 21:26
2007.06.10
Поиск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский