Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#20

Re: StreamWrite erzeugt nur 0 Byte-File

  Alt 17. Jun 2008, 10:38
Zitat von devidespe:
Du meinst bestimmt WriteBuffer, da ich kein WriteFile entdecken kann.
Ja, ich meinte Delphi-Referenz durchsuchenWriteBuffer().

Zitat von devidespe:
Wie erklärst Du Dir die Fehlermeldung beim Compilieren ?
Na das Delphi-Referenz durchsuchenWriteBuffer() eine Procedure ist und keine Funktion. Und da liegt auch der Fehler: Delphi-Referenz durchsuchenWriteBuffer() gibt keine Anzahl der geschriebenen Bytes zurück, sondern versucht immer die angegebene Anzahl im Stück zu schreiben. Delphi-Referenz durchsuchenWrite() kehrt direkt zurück und gibt die Anzahl der geschriebenen Bytes an. Da hatte ich also die falsche Methode im Kopf.

Ich habe es eben nochmal schnell korrigiert in Delphi und getestet:

Delphi-Quellcode:
function DateiSchreiben(const AFilename: string; const AFileSize: Int64): boolean;
const
  coBlockSize = 16384;
var
  lStream: TStream;
  lFileData: string;
  lBytesToWrite: Int64;
  lWritten: Integer;
begin
  result := false;

    // Erstmal den Stream öffnen. Wenn das nicht klappt, brauch ich kein Array...
  lStream := TFileStream.Create(AFilename, fmCreate or fmShareDenyWrite);
  try
    lFileData := StringOfChar(#55, coBlockSize);

    lBytesToWrite := AFileSize;
    while ( lBytesToWrite > 0 ) do
    begin
      lWritten := lStream.Write(lFileData[1], Min(lBytesToWrite, coBlockSize));

      if lWritten <> Min(lBytesToWrite, coBlockSize) then
        exit;

      Dec(lBytesToWrite, lWritten);
    end;

    result := true;
  finally
    lStream.free;
  end;
end;
Zitat von devidespe:
Übrigens nette Signatur, ich hätte aber an 3 Stellen jeweils 20h eingefügt.
Da ich schon sehr gut Hex so lesen kann (wie manche andere auch), wäre das zu einfach gewesen, da 0x20 zu auffällig sind. So weiss man erstmal nicht ob es was sinniges etc ist.
  Mit Zitat antworten Zitat