![]() |
Re: StreamWrite erzeugt nur 0 Byte-File
Delphi-Quellcode:
...
bStreamOk := true; try datei := Tfilestream.create(s_filename, fmcreate or fmShareExclusive); except bStreamOk := false; end; if (bStreamOk = true) then begin Bevor ihr euch weiter in eine Grundsatzdiskussion verheddert, sagt mir doch mal bitte einer, wo in desem konkreten Fall das Problem mit dem Vergleich mit true genau liegt. [ED] bStreamOK hat beim Vergleich entweder den Wert der Konstanten TRUE oder den von FALSE, und keinen Anderen. Als Fehlerursache im Zusammenhang mit der Ausgangsfrage kommt der true-Vergleich daher m.E. nicht in Betracht. Oder irre ich mich, das wollte ich eigentlich nur wissen :mrgreen: [/ED] |
Re: StreamWrite erzeugt nur 0 Byte-File
Vorschlag: lies bitte den letzten Teil meines Beitrags zuvor, ab dem letzten Quote durch.
Zitat:
|
Re: StreamWrite erzeugt nur 0 Byte-File
@Muetze1
danke! das ist mal eine gute Erklärung! Werd es mir hinter die Ohren schreiben. In dem Zusammenhang eine Frage: Besteht zwischen
Delphi-Quellcode:
und
bvar:=(a and b);
if bvar then ....
Delphi-Quellcode:
ein Unterschied?
if (a and b) then bvar:=true
else bvar:=false; if bvar then ... Ich vermute mal die erste Version ist zu bevorzugen. Gruß K-H |
Re: StreamWrite erzeugt nur 0 Byte-File
Benötigst du bvar anschliessend noch?
Dann natürlich die erstere |
Re: StreamWrite erzeugt nur 0 Byte-File
Zitat:
Da du die Variable direkt danach in einer Bedingung benutzt, würde ich es direkt auswerten in der If Anweisung, ausser die Variable wird noch woanders benötigt, dann würde ich persönlich die einzeilige Evaluation benutzten. Aber wie gesagt, das wäre hier wirklich Geschmackssache - im Gegensatz hierzu:
Delphi-Quellcode:
Hier würde dann wieder das zuvor geschriebene gelten, vor allem da dies nur bei boolschen Variablen a und b klappen sollte und bei allen anderen Ordinaltypen als a und b zu einer binären AND Operation führen und nicht zu einer logischen Evaluierung...
bvar := (a and b) = true;
|
Re: StreamWrite erzeugt nur 0 Byte-File
Vielen Dank euch beiden!
Gruß K-H |
Re: StreamWrite erzeugt nur 0 Byte-File
Zitat:
Delphi-Quellcode:
Das 2. Problem ist die Zeile mit WriteBuffer, wobei mir Delphi jedesmal den folgenden Compilierungsfehler meldet:
function DateiSchreiben(const AFilename: string; const AFileSize: Int64) : Boolean;
E2010: Inkompatible Typen: 'Integer' und 'procedure, untyped pointer or ununtyped parameter'. Wobei Du von lFileData immer nur das erste Zeichen verwendest. Angenommen ich habe hier einen String mit 64 unterschiedlichen Zeichen, dann würde die Verwendung des ausschließlich 1. Zeichens falsche Ergebnisse liefern. |
Re: StreamWrite erzeugt nur 0 Byte-File
Zitat:
Zitat:
|
Re: StreamWrite erzeugt nur 0 Byte-File
Zitat:
Wie erklärst Du Dir die Fehlermeldung beim Compilieren ? Übrigens nette Signatur, ich hätte aber an 3 Stellen jeweils 20h eingefügt. |
Re: StreamWrite erzeugt nur 0 Byte-File
Zitat:
![]() Zitat:
![]() ![]() ![]() 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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 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 by Thomas Breitkreuz