(Gast)
n/a Beiträge
|
Re: File splitten
28. Nov 2009, 04:37
Hallo Delphianer, bei D2 ist die Streambehandlung noch sehr jungfräulich implementiert.
So sollte es dennoch ohne Probleme funktionieren.
Delphi-Quellcode:
{$R+} {$Q+} {$I+}
function ReadOffset(AStartOffset: LongWord; AEndOffset: LongWord;
ASourceFile: PChar; ADestFile: PChar): LongBool;
var
hSrcFile, hDestFile: LongWord;
ptrBuffer: pointer;
cbLen: LongWord;
cbRead, cbWritten: LongWord;
begin
result := false;
ptrBuffer := nil;
cbLen := AEndOffset - AStartOffset;
//-- AStartOffset muss immer kleiner als AEndOffset sein
if cbLen > 0 then begin
//-- Existierendes File öffnen
hSrcFile := CreateFile(ASourceFile, GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
//-- Wenn Ok dann weiter
if hSrcFile <> INVALID_HANDLE_VALUE then begin
//-- Offset ausgehend vom Anfang der Datei setzen, also beginnend von.
if SetFilePointer(hSrcFile, AStartOffset, nil, 0) <> $FFFFFFFF then begin
//-- Vom Heap Speicher für die zu lesende Daten anfordern
GetMem(ptrBuffer, cbLen);
//-- Anzahl der Bytes = AEndOffset - AStartOffset in den Buffer lesen
if ReadFile(hSrcFile, ptrBuffer^, cbLen, cbRead, nil) then begin
//-- wenn alle Ok weiter
if cbLen = cbRead then begin
//-- OutPut File erstellen
hDestFile := CreateFile(ADestFile, GENERIC_READ or GENERIC_WRITE, 0,
nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
//-- Wenn Ok dann weiter
if hDestFile <> INVALID_HANDLE_VALUE then begin
//-- Die zuvor gelesenen Daten in das Output File schreiben
result := WriteFile(hDestFile, ptrBuffer^, cbLen, cbWritten, nil);
//-- OutPut File schließen
CloseHandle(hDestFile);
end; //-- if hDestFile <> INVALID_HANDLE_VALUE then begin
end; //-- if cbLen = cbRead then begin
end; //-- if ReadFile(hSrcFile, ptrBuffer^, cbLen, cbRead, nil) then begin
FreeMem(ptrBuffer, cbLen);
end; //-- if SetFilePointer(hSrcFile, AStartOffset, nil, 0) <> $FFFFFFFF then begin
CloseHandle(hSrcFile);
end; //-- if hSrcFile <> INVALID_HANDLE_VALUE then begin
end; //-- if cbLen > 0 then begin
end;
{$R-} {$Q-} {$I-}
Also Morgähn, und lg.
|
|
Zitat
|