![]() |
Bytes aneinanderhängen?
Ich benötige für ein Programm ein MB 0-Bytes. Nun möchte ich das allerdings nicht von vornherein in die Source einbauen, sonst ist die EXE ja auch schon über ein MB gross ;)
Ich will dieses eine MB also zur Laufzeit erzeugen. Danach möchte ich dieses MB in einen FileStream speichern. Ich habs nun so probiert:
Delphi-Quellcode:
Danach schreib ich das so in den FileStream:
//t ist ein Array of Byte
SetLength(t,1048576); for i:=0 to 1048575 do t[i]:=$0;
Delphi-Quellcode:
Es wird aber nichts geschrieben - warum?
F.Write(t,1048576);
(Wahrscheinlich ist es mal wieder ein ganz triviales Problem, aber ich komm einfach nicht auf die Lösung :roll:) MfG Z4ppy |
Re: Bytes aneinanderhängen?
Delphi-Quellcode:
F.Write(t[0], 1048576);
|
Re: Bytes aneinanderhängen?
Moin Z4ppy,
ich würde das ganz einfach mit einem String lösen:
Delphi-Quellcode:
s := StringOfChar(#00,1024*1024);
fs.Write(s[1],Length(s)); |
Re: Bytes aneinanderhängen?
War ja klar :D Danke, 3_of_8 ;)
@Christian: Danke, das wär natürlich auch ne Lösung, aber so ists natürlich eleganter :) MfG Z4ppy |
Re: Bytes aneinanderhängen?
Noch einfachher:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const FILEPATH = 'd:\test.dat'; var fs: TFileStream; begin fs := TFileStream.Create(FILEPATH, fmCreate); try fs.Size := 1024 * 1024; finally fs.Free; end; end; |
Re: Bytes aneinanderhängen?
Delphi-Quellcode:
for i:=0 to 1048575 do t[i]:=$0;
Delphi-Quellcode:
ZeroMemory(t[0],1048575);
|
Re: Bytes aneinanderhängen?
Zitat:
Delphi-Quellcode:
Wobei bei nem Array of Byte
ZeroMemory(@t[0], 1048575);
Delphi-Quellcode:
auch möglich wäre und ein SizeOf anstatt einer Zahl besser wären.
ZeroMemory(@t, 1048575);
Abgesehen davon fehlt sowieso das letzte Byte, 1024 * 1024 = 1048576 ;) |
Re: Bytes aneinanderhängen?
Zitat:
|
Re: Bytes aneinanderhängen?
Auf die Gefahr hin, das ich mich als Depp oute, aber wieso funktioniert das hier eigentlich nicht?
Delphi-Quellcode:
Mir ist klar, das 'DynamicArray' ein Pointer ist und nur Schrott in der Datei stünde oder vielleicht sogar eine AV käme, aber wenigstens sollte sie 1MB groß sein, wenn keine AV kommt. Aber es wird wirklich gar nichts geschrieben.
MyFileStream.Write(DynamicArray,1024*1024);
:gruebel: |
Re: Bytes aneinanderhängen?
Hallo alzaimar,
Zitat:
Versuche folgendes:
Delphi-Quellcode:
Gruß Hawkeye
var
GlobalVar : array of Integer; Dummy : array [1..1024 * 1024] of Byte; procedure TForm1.Button1Click; var S : TFileStream; begin Dummy[1] := 0; // damit Dummy nicht wegoptimiert wird... S := TFileStream.Create('C:\temp\test.stm', fmCreate); S.Write (GlobalVar, 1024 * 1024); S.Free; end; |
Re: Bytes aneinanderhängen?
Bei einer Datei einfach die Position über das Maximum nach hinten setzen, der Rest wird mit Nullen ergänzt, bei einem Stream die Size-Variante von Luckie benutzen und fertig. Dürfte viel schneller sein, als die Nullen wirklich schreiben zu wollen.
|
Re: Bytes aneinanderhängen?
Zitat:
|
Re: Bytes aneinanderhängen?
Zitat:
|
Re: Bytes aneinanderhängen?
Ich habe die Datei mit dem Editor geöffnet und es war nichts zu sehen. Ich war an der Arbeit, deswegen habe ich das nur flüchtig überprüft.
|
Re: Bytes aneinanderhängen?
Zitat:
|
Re: Bytes aneinanderhängen?
Ich habs grad mit HxD überprüft... Es werden tatsächlich 0-Bytes angehängt ;) (Ist ja auch das einzig logische :D)
MfG Z4ppy |
Re: Bytes aneinanderhängen?
Zitat:
![]() Also ist die Variante mit dem Stream klar nicht schneller, da (ab) XP sowieso die Datei nullt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 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