Thema: File splitten

Einzelnen Beitrag anzeigen

uoeb7gp
(Gast)

n/a Beiträge
 
#5

Re: File splitten

  Alt 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.
  Mit Zitat antworten Zitat