AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bytes aneinanderhängen?

Ein Thema von Z4ppy · begonnen am 9. Jan 2009 · letzter Beitrag vom 14. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#1

Bytes aneinanderhängen?

  Alt 9. Jan 2009, 15:03
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:
//t ist ein Array of Byte
SetLength(t,1048576);
for i:=0 to 1048575 do t[i]:=$0;
Danach schreib ich das so in den FileStream:
F.Write(t,1048576); Es wird aber nichts geschrieben - warum?

(Wahrscheinlich ist es mal wieder ein ganz triviales Problem, aber ich komm einfach nicht auf die Lösung )

MfG Z4ppy
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Bytes aneinanderhängen?

  Alt 9. Jan 2009, 15:05
F.Write(t[0], 1048576);
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Bytes aneinanderhängen?

  Alt 9. Jan 2009, 15:07
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));
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Bytes aneinanderhängen?

  Alt 9. Jan 2009, 15:09
War ja klar Danke, 3_of_8

@Christian: Danke, das wär natürlich auch ne Lösung, aber so ists natürlich eleganter

MfG Z4ppy
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Bytes aneinanderhängen?

  Alt 9. Jan 2009, 15:18
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;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Bytes aneinanderhängen?

  Alt 9. Jan 2009, 15:19
for i:=0 to 1048575 do t[i]:=$0; ZeroMemory(t[0],1048575);
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#7

Re: Bytes aneinanderhängen?

  Alt 9. Jan 2009, 18:53
Zitat von NamenLozer:
ZeroMemory(t[0],1048575);
ZeroMemory(@t[0], 1048575); Wobei bei nem Array of ByteZeroMemory(@t, 1048575); auch möglich wäre und ein SizeOf anstatt einer Zahl besser wären.

Abgesehen davon fehlt sowieso das letzte Byte, 1024 * 1024 = 1048576
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Bytes aneinanderhängen?

  Alt 9. Jan 2009, 19:41
Zitat von Sunlight7:
Zitat von NamenLozer:
ZeroMemory(t[0],1048575);
ZeroMemory(@t[0], 1048575); Wobei bei nem Array of ByteZeroMemory(@t, 1048575); auch möglich wäre und ein SizeOf anstatt einer Zahl besser wären.

Abgesehen davon fehlt sowieso das letzte Byte, 1024 * 1024 = 1048576
Nicht SizeOf! SizeOf gibt die Größe des Pointers (4) zurück, der das Array eigentlich ist. Wenn, dann Length(t)*SizeOf(t[0]), was allerdings gefährlich ist, wenn t auch weniger als 1 Element haben kann. In dem fall müsste man den Typ dann wohl hardcoden.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Bytes aneinanderhängen?

  Alt 9. Jan 2009, 20:36
Auf die Gefahr hin, das ich mich als Depp oute, aber wieso funktioniert das hier eigentlich nicht?
MyFileStream.Write(DynamicArray,1024*1024); 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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Bytes aneinanderhängen?

  Alt 9. Jan 2009, 20:55
Hallo alzaimar,

Zitat von alzaimar:
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.
Meine Vermutung: die Systemroutinen von Windows verweigern das Schreiben, weil der zu schreibende Speicherbereich der Applikation nicht vollständig gehört.

Versuche folgendes:

Delphi-Quellcode:
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;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 Uhr.
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