Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateien erstellen (https://www.delphipraxis.net/8371-dateien-erstellen.html)

Matze 4. Sep 2003 16:11

Re: Dateien erstellen
 
Ich hab XP und NTFS, da hab ich eine 5 GB-Datei in weniger als einer Sek.

So ein unsinniges Programm :mrgreen:
Für meine Zwecke jedenfalls. ;)

Duffy 4. Sep 2003 18:27

Re: Dateien erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alle zusammen,
so gehts auch ...
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
const
  OpenFlags: array[Boolean] of Integer = (fmCreate or fmShareExclusive, fmOpenReadWrite or fmShareExclusive);
var
  FileStream: TFileStream;
begin
  FileStream := TFileStream.Create('C:\BigBigWorld.txt', OpenFlags[FileExists('C:\BigBigWorld.txt')]);
  FileStream.Size := 1024*1024*1024;
  FileStream.Free;
end;
byr

wb32 11. Sep 2003 14:00

Re: Dateien erstellen
 
Fragen über Fragen, als Kommentare im Source :)
Wäre nett wenn mir das jemand erklären könnte.
Wenn ich damit Dateien erstelle ist die mit irgendwelchen Werten gefüllt, wo kommen die her ?


Code:

var
 F: TFileStream;
 wrBytes, Size: LongWord;
 buf: Byte;
const
 BytesPerBlock = 1024;
begin
 F := TFileStream.Create('c:\test.txt', fmCreate or fmShareExclusive);
 try
  buf := 0;
  Size := 1024 * 1024;
  wrBytes := 0;
 while wrBytes + BytesPerBlock <= Size do begin
  F.Write(buf, BytesPerBlock); // hier wird in die datei geschreiben ??? 
  Inc(wrBytes, BytesPerBlock); // was wird hier gemacht ??? 
 end;
if wrBytes + BytesPerBlock < Size then F.Write(buf, Size - wrBytes); // und was wird dann hier gemacht ??? 
 finally
  F.Free;
 end;
end;
danke ...

Wormid 11. Sep 2003 14:30

Re: Dateien erstellen
 
Zitat:

F.Write(buf, BytesPerBlock); // hier wird in die datei geschreiben ???
Jau, da wird in die Datei gschrieben... Und zwar der Inhalt von "buf" mit der Länge "BytesPerBlock".

Zitat:

Inc(wrBytes, BytesPerBlock); // was wird hier gemacht ???
Hier wird die Variable "wrBytes" um "BytesPerBlock" erhöht (incrementiert). Alternativ könnte man schreiben "wrBytes := wrBytes + BytesPerBlock". Inc ist aber eleganter und der Assemblercode dahinter ist angeblich auch besser optimiert... Die Variable wrBytes hält also fest, wieviele Bytes bisher in die Datei geschrieben wurden.

Zitat:

if wrBytes + BytesPerBlock < Size then F.Write(buf, Size - wrBytes); // und was wird dann hier gemacht ???
Ich denke, die Zeile soll dafür gut sein, den Rest in die Datei zu schreiben, bis sie die Größe "Size" erreicht hat, falls das innerhalb der Schleife nicht glatt aufging. Allerdings bin ich mir so in der Form nicht sicher, ob das korrekt ist... Müsste es nicht "if wrBytes + BytesPerBlock > Size then ..." heißen?

Gruß

Wormid

wb32 11. Sep 2003 14:41

Re: Dateien erstellen
 
hmm aber

buf := 0;

woher kommt denn da der buchstaben salat in den dateien ?

Christian Seehase 11. Sep 2003 15:30

Re: Dateien erstellen
 
Moin wb,

buf ist als Byte deklariert, hat also die Länge 1.
Je Durchgang werden aber BytesPerBlock (hat den Wert 1024) Bytes geschrieben.
In der Datei landet also eine Null und die 1023 Zeichen die im Speicher auf die Null folgen. Was auch immer da stehen mag.

wb32 11. Sep 2003 15:36

Re: Dateien erstellen
 
ok verstanden :) danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz