![]() |
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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