Autor Beitrag
Blacked
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 22.08.02 08:50 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  iFileHAndle: Integer;
  Buffer: PChar;
begin
  Buffer := PChar(AllocMem(129));
  iFileHandle := FileOpen('D:\Musik\JCA\JCA - i begin to wonder.mp3', fmopenread);
  FileSeek(iFileHandle,-128,2);
  FileRead(iFileHandle, Buffer, 128);
  FileClose(iFileHandle);
  FreeMem(Buffer);
end;

Ich bekomme hierbei eine EAccessViolation - kann mir einer sagen was ich hier falsch mache... ich möchte eigentlich nur die letzten 128Byte aus einer Datei auslesen :-\
Bin für jede Hilfe Dankbar!

Ciao Blacked
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 22.08.02 09:23 
An welcher Stelle tritt die Fehlermeldung denn auf?

Versuch mal folgendes:
ausblenden Quelltext
1:
FileSeek(iFileHandle, 128, 2);					

Also nicht -128 sondern 128!

Gruß
TINO
Blacked Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 22.08.02 09:33 
Das habe ich schon versucht... also laut meinen Tests tritt der fehler beim FileRead auf...?!?
Delta7
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 23.08.02 02:13 
Hallo,

versuch mal
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  var Buffer:pointer;
begin
...
Buffer:=AllocMem(128);
...
freeMem(buffer,128);
end;

//oder , der Einfachheit halber

var Buffer:array[0..127] of byte;  //oder Char wenns beliebt
      pBuffer:pointer;

...
pBuffer:=@Buffer;
FileRead(iFileHandle,pBuffer,sizeOf(buffer));
....


Gruss
Thomas

_________________
Ein Byte hat 8 Bit. Wer's nicht glaubt, soll seinen Rechner aufschrauben und nachzählen.
Blacked Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Mo 26.08.02 09:08 
Soweit funktioniert es, allerdings schmiert es mir jetzt ab wenn ich den Buffer ausgeben will auf ein Edit!
Irgend eine Idee? Muss ich vielleicht irgendwas beachten bei der ausgabe des Buffer?!

mfg Blacked :roll:
SMI
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106

Win95-2003 / Debian / Suse
D1/D3/D6/D7
BeitragVerfasst: Mo 26.08.02 11:39 
Hast du den Speicher vieleicht zu früh freigegeben? Erst die Daten dem Editfeld zuweisen, dann den Speicher freigeben. Ich hab unten ein Beispiel gemacht, jedoch habe ich die API Befehle für den Dateizuriff verwendet.


SMI

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  iFileHAndle: Integer;
  lpBuffer: PCHAR;

  null:integer;
begin
  lpBuffer := AllocMem(129);
  iFileHandle:=CreateFile('\\.\d:\TEST.txt',GENERIC_READ,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  SetFilePointer(iFileHandle,-129,NIL,FILE_END);
  ReadFile(iFileHAndle, lpBuffer^, 129, NULL, nil);
  CloseHandle(iFileHandle);
  ShowMessage(STRING(lpBuffer)+#0);
  edit1.text:=STRING(lpBuffer)+#0;
  FreeMem(lpBuffer);
end;