Schnell eine leere Datei schreiben

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Justy
Beiträge: 131
Registriert: 10.09.2004 13:31
Wohnort: Feldbach / Steiermark / Österreich
Kontaktdaten:

Schnell eine leere Datei schreiben

Beitrag von Justy »

Hallo!

Was gibts für Möglichkeiten eine sehr große Datei (1-2gb) mit Chr(0) (oder sonstwas, ist ziemlich egal) SCHNELL vollzuschreiben?
Mit WriteByte(Chr(0)) geht nichts weiter, da schafft man höchstens 3 mb/s!

In den Foren und im CodeArchiv hab ich gesucht aber nichts gefunden.

Danke für eure Hilfe!
Justy



[EDIT]
Hab grad WriteData gesehen!
Dazu ne frage: wie viel speicher kann ich höchstens auf einmal verwenden, ich nehm mal an 2gb wärn da nicht so gut :mrgreen:
Am Anfang erschuf der Mensch Gott.
Friedrich Nietzsche
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

du kannst maximal soviel speicher verwenden wie dein Opfer RAM hat. NUr du musst aufpassen da nicht unbedingt jeder eine schnelle Festplatte hat und so das füllen etwas Systemabhängig wird.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Erstell dir einen Speicherbereich mit [c]AllocateMemory()[/c] der Größe [c]64 * 1024 Bytes[/c] oder so ähnlich und schreibe diesen Block dann mehrmals mit [c]WriteData()[/c] nacheinander in eine Datei.
Zum Beispiel so:

Code: Alles auswählen

ChunkSize.l = 1024 * 1024 ; 1 MB
Size.l = 1024 * 1024 * 1024 ;  1 GB
Parts.l = Size / ChunkSize ; 1024

File.s = "J:\Muelldatei2.dat"

Time.l = ElapsedMilliseconds()
FileID.l = CreateFile(#PB_Any, File)
If FileID
  *Mem = AllocateMemory(ChunkSize)
  For a.l = 1 To Parts
    WriteData(*Mem, ChunkSize)
  Next
  FreeMemory(*Mem)
  CloseFile(FileID)
EndIf
Time = ElapsedMilliseconds() - Time
MessageRequester("Zumüllprogramm", "Benötigte Zeit für " + Str(Size) + " Bytes zu schreiben: " + Str(Time) + " ms.")
; Beispiele von mir:
; 124329 ms für   1 GB auf O:\ ( 8,25 MB/s)
;  14863 ms für 300 MB auf J:\ (20,27 MB/s)
Benutzeravatar
Justy
Beiträge: 131
Registriert: 10.09.2004 13:31
Wohnort: Feldbach / Steiermark / Österreich
Kontaktdaten:

Beitrag von Justy »

danke für eure extrem schnellen antworten!


[EDIT]
Achja, dass da keine Missverständnisse aufkommen, ich brauch das nicht für einen Festplatten-Spammer sondern um leere Images für eine Virtual Machine zu erstellen! :mrgreen:
Am Anfang erschuf der Mensch Gott.
Friedrich Nietzsche
Antworten