Главная страница
    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.049 c
15-1178975370
Oleg_teacher
2007-05-12 17:09
2007.06.10
Отчет


2-1179309426
allucard
2007-05-16 13:57
2007.06.10
Пример на языке С создание окна, помогите перевести строку


1-1176549475
gosha73
2007-04-14 15:17
2007.06.10
Утечка памяти в TOpenDialog?


2-1179387067
FRAGMIR
2007-05-17 11:31
2007.06.10
ADOconnection


2-1179522833
Пун
2007-05-19 01:13
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский