Registriert seit: 2. Jan 2005
175 Beiträge
Delphi 2007 Enterprise
|
Re: Bandlaufwerk / Streamer ansprechen unter Delphi.
10. Nov 2005, 16:28
Hi,
das schein langsam zu funktionieren.
Speichern kann ich jetzt auf band, und bei lesen bkomme ich nicht das was ich gespeichert habe.
ich wwrde dir mal posten wie die beiden routinen aussehen.
Write
Delphi-Quellcode:
Var buf : Array [0..512] of Byte;
re : dWord;
str : TMemoryStream;
bow : dWord;
lcm : pointer;
begin
TapeHandle := OPENDRIVE;
str := TMemoryStream.Create;
str.LoadFromFile('C:\mt.exe');
str.Position :=0;
lcm := nil;
bow := 0;
WriteTapeMark( TapeHandle, 0, 1, False );
WriteFile( TapeHandle, str.memory, str.Size, bow, lcm );
showmessage(inttostr(bow));
str.Free;
closedrive;
und Read
Delphi-Quellcode:
Var bow : dword;
bwr : dword;
lcm : pointer;
buf : pointer;
outf : Thandle;
total : dword;
begin
TapeHandle := OPENDRIVE;
Security.nLength := SizeOf( TSecurityAttributes );
Security.bInheritHandle := False;
Security.lpSecurityDescriptor := nil;
// SetTapePosition( TapeHandle,2, 0,1,0, False);
lcm := nil;
buf := VirtualAlloc( lcm, 512, MEM_COMMIT,PAGE_READWRITE );
outf := CreateFile('C:\Temp\mt-test.exe',GENERIC_WRITE,0,
@Security,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
ReadFile( TapeHandle, buf, 512, bow,nil );
bow := 1;
total := 0;
While bow>0 do begin
ReadFile( TapeHandle, buf, 512, bow,nil );
if bow>0 then WriteFile( outf, buf, bow, bwr, nil);
inc( total, bow );
End;
closehandle(outf);
showmessage(inttostr(total));
closedrive;
Da bekomme ich am ende noch ein speicher error.
Ich bin mir aber nicht ganz sicher ob das mit dem speicher reservierung ganz ok ist.
Ich werde es auf jeden fall noch weiter quellen.
gruss
seba
|
|
Zitat
|