Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.24;
Скачать: CL | DM;

Вниз

Почему не работает ?   Найти похожие ветки 

 
VID ©   (2002-06-12 20:09) [0]

При выполнении кода получаю Access Violation.
Причём, интересно то, что выполняются все операторы код, а Access Violation выдаётся при выходе из процедуры (так кажется).

А вот и виновник "торжества":

procedure TForm1.ReadClick(Sender: TObject);
Var Buffer:array of Char;
FileStream:TFileStream;
begin

Try
FileStream := TFileStream.Create (FileName.FileName,fmOpenRead);
Except
ShowMessage("File access error, or the specified file does not exists"); exit;
end;

try
FileStream.Seek(ReadFrom.Value, soFromBeginning);
except
FileStream.Free;
ShowMessage("Error occured while position tracking in the specified file"); Exit;
End;

try
SetLength(Buffer, Offset.value);
FileStream.ReadBuffer(buffer, SizeOf(Buffer));
Finally
FileStream.Free;
Buffer := nil;
end;
// RD: TMEMO
RD.TEXT :=String(Buffer);
end;


 
yozhik ©   (2002-06-12 20:16) [1]

мне кажется ошибка в следующем...

RD.TEXT :=String(Buffer); - надо поставить перед Buffer := nil;



 
VID ©   (2002-06-12 20:27) [2]

Я поставил конечно, и проверил... Access Violation. Но вообще-то по-логике, там как раз таки и не надо ставить Buffer := nil, поскольку в этом случае, я потеряю всю инфу, что была в буффере, а она мне вообще-то нужна, для отображения в RD (TMemo)...

Ищем дальше...


 
VID ©   (2002-06-12 20:29) [3]

упс... пардон :) просто не правильно понял с первого раза :)
Я поставил Buffer := nil, после RD.TEXT := String(Buffer), но к сожалению, всё равно AV...


 
MBo ©   (2002-06-12 21:03) [4]

try убрал для краткости

procedure TForm1.ReadClick(Sender: TObject);
Var Buffer: String;
FileStream:TFileStream;
begin

FileStream := TFileStream.Create (FileName.FileName,fmOpenRead);

FileStream.Seek(ReadFrom.Value, soFromBeginning);

SetLength(Buffer, Offset.value);
//Offset.value- что это?
//по названию больше похоже на смещение, а не на размер коп. блока

FileStream.ReadBuffer(buffer[1], Offset.value);

RD.TEXT :=Buffer;

FileStream.Free;
end;


 
Sasha9 ©   (2002-06-12 21:08) [5]

вообще-то непонятно зачем ты очищаешь буфер....
а ошибок у тебя несколько:
1.ReadBuffer исползуется только когда SizeOf(Buffer) величина постоянная, используй просто Read
2.В Read параметр должен быть не Buffer а Buffer[0], на эту ошибку компилятор ругаться не будет, если хош объясню почему.

А вообще-то незачем так геморроиться, memo1.Lines.LoadFromFile();, или LoadFromStream


 
VID ©   (2002-06-12 21:29) [6]

TO Mbo: спасибо... offset.value - это просто количество байтов, необходимых для считывания из файла. Указывается пользователем.
И ещё, почему FileStream.ReadBuffer(buffer [1], Offset.Value)?

А вообще, Sasha9, дал мне понять, что я не на верном пути :)
Задача такая:
ДАНО: есть файл. Не текстовый, а какой-нить exe, или wave.
ЦЕЛЬ: прочитать в буффер какой-то фрагмент файла, и сохранить этот фрагмент в новый файл.

Просто у меня есть огромный файл с сэмплами (кусочки аудио звука), и я знаю, где в нём (с какого байта) начинается каждый новый сэмпл, и длину сэмпла в байтах. Вот и хочу разобрать этот big файл по частям.


 
VID ©   (2002-06-12 21:42) [7]

TO ALL: Цель достигнута. Задача выполнена.
TO MBo: Однако, вопрос насчёт FileStream.ReadBuffer(buffer[1], Offset.Value) остаётся открытым :)


 
MBo ©   (2002-06-13 07:29) [8]

FileStream.ReadBuffer читает из файла, записывая данные, начиная с адреса, указанного первым параметром. buffer[1] - как раз первый символ строки.


 
Yuri-7   (2002-06-13 08:40) [9]

Зачем так сложно хранить сэмплы? Сохрани их как ресурсы RCDATA в EXE-шнике и считывай потом в TResourceStream и делай с ними что хочешь.


 
Игорь Шевченко ©   (2002-06-13 10:45) [10]

VID © (12.06.02 21:29)


Просто у меня есть огромный файл с сэмплами (кусочки аудио звука), и я знаю, где в нём (с какого байта) начинается каждый новый сэмпл, и длину сэмпла в байтах. Вот и хочу разобрать этот big файл по частям.


Использовать MemoryMapped files - rulez forever для таких задач.
Не будет никакого геморроя.

С уважением,


 
Sasha9 ©   (2002-06-13 15:08) [11]

MBo ©
тока не buffer [1] а buffer [0]


 
Sasha9 ©   (2002-06-13 15:11) [12]

2VID ©
я не понял, а зачем тогда тебе МЕМО


 
MBo ©   (2002-06-13 15:22) [13]

>Sasha9
у меня это String



Страницы: 1 вся ветка

Текущий архив: 2002.06.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
6-77535
nikulin
2002-04-17 16:02
2002.06.24
TServerSocket в unit


6-77545
ATLANTIDO
2002-04-13 16:23
2002.06.24
Расшареные ресурсы


4-77702
Falcon
2002-04-23 15:17
2002.06.24
Как вытащить имена Items (caption) из окна


3-77271
roadstar
2002-05-29 12:38
2002.06.24
Помогите с SQL-запросом!!!


1-77458
Aleksandr
2002-06-11 14:56
2002.06.24
Помогите с DLL разобраться!