Registriert seit: 2. Jan 2005
175 Beiträge
Delphi 2007 Enterprise
|
Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
11. Nov 2005, 16:51
Ich habe es noch ein mal anders versucht :
Delphi-Quellcode:
Var buf : Pointer;
re : boolean;
bow : dword;
bor : dword;
lcm : pointer;
inf : thandle;
tot : dWord;
tot1 : dWord;
begin
TapeHandle := OPENDRIVE_READ;
Security.nLength := SizeOf( TSecurityAttributes );
Security.bInheritHandle := False;
Security.lpSecurityDescriptor := nil;
SetTapePosition ( TapeHandle, 4, 0, 0,0, False );
buf := VirtualAlloc( nil, 512, MEM_COMMIT, PAGE_READWRITE );
inf := CreateFile('C:\mt.exe',GENERIC_READ,0,
@Security,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
tot := 0;
tot1:= 0;
bor := 1;
While bor>0 do Begin
lcm := nil;
re := ReadFile(inf,buf,512,bor,lcm);
If bor>0 Then Begin
lcm := nil;
re := WriteFile( TapeHandle, buf, bor, bow, lcm);
Inc( tot, bor );
Inc( tot1,bow );
End;
End;
ShowMessage('Read :'+inttostr(tot)+chr(10)+'Write :'+IntToStr(tot1));
WriteTapeMark( TapeHandle, 0, 1, False );
CloseHandle( inf );
CloseDrive;
VirtualFree( buf, 512, MEM_DECOMMIT );
Es sieht garnicht so schlecht aus.
Es wird auf dem Band aufgenohmen aber ab den Offset 4 jest 512 Bytes gibts differenz zur orginal file. Die differenz ist 8 Byte Lang und wiederholt sich regelmessig jede 512 Bytes.
Und am Ende Bekomme ich noch ein mechtiges Delphi Abstürz. vermutlich geht hier um den speicher ( immer noch )
|
|
Zitat
|