![]() |
150 MB Datei erstellen immer in 256byte schritten?
Also folgendes...
Ich möchte eine 150 MB große Datei erstellen, dabei sollen die ersten 256byte mit 1 gefüllt werden, die nächsten 256byte mit 2 u.s.w. Wie mach ich das am einfachsten? R0BIN |
Re: 150 MB Datei erstellen immer in 256byte schritten?
Guck dir mal
![]() |
Re: 150 MB Datei erstellen immer in 256byte schritten?
ok, ansich hab ich das verstanden:
Delphi-Quellcode:
Aber ich verstehe nicht wie ich genau 256byte als 1 und die nächsten als 2 und wieder die nächsten als 3 schreiben kann. Die Filegröße soll dabei dynamisch von mir zugewiesen werden können.
procedure caststring;
var fs: TFileStream; const s: string = '1'; begin fs := TFileStream.Create('dateia256.txt', fmCreate or fmOpenWrite); fs.Write(PChar(s)^, Length(s)); end; R0BIN |
Re: 150 MB Datei erstellen immer in 256byte schritten?
Ein Zeichen ist ein Byte ... du musst also nur in einer Schleife so lange Bytes in den Stream schreiben, bis die Dateigröße erreicht ist ...
Beispiel:
Delphi-Quellcode:
Florian
procedure caststring;
var fs: TFileStream; s: string; i: integer; const FileSize = 157286400; //In Byte 1024 * 1024 * 150 = 150MB begin fs := TFileStream.Create('dateia256.txt', fmCreate or fmOpenWrite); try for i := 1 to (FileSize div 256) do begin s := IntToStr(i); fs.Write(PChar(s)^, Length(s)); end; finally fs.Free; end; end; |
Re: 150 MB Datei erstellen immer in 256byte schritten?
irgendwie funktioniert das nicht...die zahlen sind durcheinander und die datei ist keine 150mb groß!
hmm komisch! |
Re: 150 MB Datei erstellen immer in 256byte schritten?
Wie groß ist die Datei denn?
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Die sollte nach deiner For-Schleife 150MB/256 gross sein. Ausserdem schreibst du ja nicht 1 256 mal rein dann 2 256 mal. Brauchst du doch 2 Schleifen um das zu machen. Die eine fuer die Anzahl der Zahlen die innere fuer die 256 mal der gleichen Zahl.
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Sorry war mein Fehler, aber so sollte es gehen:
Delphi-Quellcode:
@Mackhack: Ja, hatte es zwischenzeitlich auch schon gemerkt ... Sowas blödes :? ;)
procedure caststring;
var fs: TFileStream; s: string; i, i2: integer; const FileSize = 1024; //In Byte 1024 * 1024 * 150 = 150MB begin fs := TFileStream.Create('C:\dateia256.txt', fmCreate or fmOpenWrite); try for i := 1 to (FileSize div 256) do begin s := ''; SetLength(s, 256); for i2 := 1 to 256 do s[i2] := IntToStr(i)[1]; fs.Write(PChar(s)^, Length(s)); end; finally fs.Free; end; end; Florian |
Re: 150 MB Datei erstellen immer in 256byte schritten?
Da war kein roter Kasten da :cry:
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Mhh bei mir grade auch nicht ...
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
geht immer noch nicht wirklich....jetzt kommen 1 - 9 und dann aber wieder einsen bis neunen...
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Sind ja auch Ferien :roll:
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Zitat:
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
für einen test...
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Mist ... war doch falsch :? Das problem liegt hier:
Delphi-Quellcode:
Man kann nicht einfach schreiben:
for i := 1 to (FileSize div 256) do
begin s := ''; SetLength(s, 256); for i2 := 1 to 256 do s[i2] := IntToStr(i)[1]; fs.Write(PChar(s)^, Length(s)); end;
Delphi-Quellcode:
weil dann die Datei möglicherweise zu groß ist ...
for i := 1 to (FileSize div 256) do
begin for i2 := 1 to 256 do s := IntToStr(i); fs.Write(PChar(s)^, Length(s)); end; |
Re: 150 MB Datei erstellen immer in 256byte schritten?
Moin Zusammen,
wie wär's denn mit:
Delphi-Quellcode:
var
sBuf : string; i : integer; begin fs := TFileStream.Create(....); try while true do begin for i := 1 to 255 do begin sBuf := StringOfChar(chr(i),256); fs.Write(sBuf[1],256); if fs.Size = (1024*1024*150) then exit; end; end; finally FreeAndNil(fs); end; end; |
Re: 150 MB Datei erstellen immer in 256byte schritten?
Warum nimmst Du nicht einfach einen PChar, ZeroMemory, bzw. FillMemory und schreibst das direkt in die Datei, anstatt Dich mit den FileStreams herum zu ärgern? :gruebel:
Edit: Also wenn das mit dem Roten Kasten funktionieren würde, wäre das nicht schlecht... |
Re: 150 MB Datei erstellen immer in 256byte schritten?
Na ja jetzt hast ja wieder nur eine Schleife drin und nur noch 1024 als Filesize.
//Edit: Hat sich erledigt! |
Re: 150 MB Datei erstellen immer in 256byte schritten?
jetzt ist es wieder wie nach deinem ersten code!
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Naja irgendwie kann das nicht so klappen. du deine 111.. 222... 333.. ...999... geschrieben hast, braucht ja jedes Zeichen im string wirklich nur ein byte, nur dann bei der 10 werden immer 2 bytes zur darstellung gebraucht und dann ab der 100 3 zeichen, also muss etwas an der aufgabenstellung geändert werden. müssen es unbedingt zahlen sein?
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
also bis jetzt hat noch keine möglichkeit so richtig funktioniert...
nein es müssen nicht unbedingt zahlen sein...nur unterschiedliche zeichen... |
Re: 150 MB Datei erstellen immer in 256byte schritten?
Das Konzept ist schwierig ... man müsste in die Schleife noch einberechnen, wie viele Bytes eine Zahl hat ...
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Zitat:
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
ja das wäre ja kein thema 0-9 a-z A-Z aber wie schreibe ich die procedure?
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Hab gerade probiert, ist ganz leicht.
Wird der Source noch benötigt? |
Re: 150 MB Datei erstellen immer in 256byte schritten?
ja wäre echt nett wenn du den posten könntest!
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Wieso missbraucht ihr dafür nicht einfach die ASCII-Zeichen? Die Zeichen 1-31 sollte man natürlich weglassen aber danach können doch alle genommen werden und es ist auch immer ein anderes Zeichen...
Flare |
Re: 150 MB Datei erstellen immer in 256byte schritten?
Jo, no problemo.
Warum ärgert ihr euch immer mit den komischen FileStreams???
Delphi-Quellcode:
Geht doch ohne viel einfacher :???:
procedure TForm1.CreateMyFile;
const MaxSize=150 * 1024 * 1024; var F:File; PC:PChar; c:Char; i:Integer; label DoItAgain; begin GetMem(PC, 256); AssignFile(F, 'E:\Test.nix'); ReWrite(F, 1); DoItAgain: For c:='a' to 'z' do begin For i:=0 to 256-1 do PC[i]:=c; BlockWrite(F, PC^, 256); If FileSize(F)>=MaxSize then Break; end; If FileSize(F)<MaxSize then goto DoItAgain; CloseFile(F); FreeMem(PC); end; |
Re: 150 MB Datei erstellen immer in 256byte schritten?
danke, das scheint zu gehen!
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Und jetzt noch ohne Label:
Delphi-Quellcode:
Florian
procedure TForm1.CreateMyFile;
const MaxSize=150 * 1024 * 1024; var F:File; PC:PChar; c:Char; i:Integer; begin GetMem(PC, 256); AssignFile(F, 'E:\Test.nix'); ReWrite(F, 1); repeat For c:='a' to 'z' do begin For i:=0 to 256-1 do PC[i]:=c; BlockWrite(F, PC^, 256); If FileSize(F)>=MaxSize then Break; end; until FileSize(F)>=MaxSize; CloseFile(F); FreeMem(PC); end; |
Re: 150 MB Datei erstellen immer in 256byte schritten?
@Florian: Schlaumeier :mrgreen: :mrgreen: :mrgreen:
Zitat:
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Zitat:
|
Re: 150 MB Datei erstellen immer in 256byte schritten?
Echt?
Hmm, ich hab höchstens 2 Labels, und die sind mir lieber, weils für mich übersichtlicher ist. Aber ich will jetzt mal keine Diskussion anzettln. |
Re: 150 MB Datei erstellen immer in 256byte schritten?
Ja, bei zweien ist auch noch nicht schlimm finde ich, aber halt über 10 wirds schon arg unübersichtlich, deshalb vermeide ich labes, wo ich nur kann. :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:50 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