AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

File splitten

Ein Thema von Roookie · begonnen am 28. Nov 2009 · letzter Beitrag vom 28. Nov 2009
Antwort Antwort
uoeb7gp
(Gast)

n/a Beiträge
 
#1

Re: File splitten

  Alt 28. Nov 2009, 03: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz