Seite 1 von 3

Datei mit fester Größe erstellen

Verfasst: 22.05.2006 10:31
von funk.munich
Hi zusammen,

gibt es eine Möglichkeit eine Datei mit einer bestimmten Größe (z.B. 5 MB, ...) zu erstellen?

Hintergrund:
Ich mache öfters Speicher Tests und dort muss die Festplatte nur noch
eine bestimmten freien Speicherplatz besitzen. Anstatt dies immer manuell
zu machen würde ich dies gerne über ein kleines Tool machen.

Danke + Gruß,
Daniel

Verfasst: 22.05.2006 10:51
von Karl
Try this:

Code: Alles auswählen

*Mem = AllocateMemory(5 << 20)

If *Mem
   CreateFile(1, "c:\MyFile.dat")
   WriteData(1, *mem, 5 << 20)
   CloseFile(1)
EndIf   
Karl
-- bobobo konnte nicht wiederstehen wg. unten :) Ro's Code macht außerdem nicht die gewünschte Dateigröße

Verfasst: 22.05.2006 10:51
von roherter
beispiel 1MB

Code: Alles auswählen

CreateFile(1,"d:/test.pop")
   k=1024 ;1 Kilobyte
    For a=0 To k*k
       WriteByte(1,0)
    Next
CloseFile(1)
Die Datei besteht nur aus nullen.
@karl mein code ist kleiner aber sonst :allright:

Verfasst: 22.05.2006 11:00
von funk.munich
Hi Karl,

super cool ... mehr muss man dazu garnicht machen. Das finde ich gut :D
Eine weitere Frage hätte ich jedoch noch.

Wenn ich mir die Größe der Datei unter Windows anschaue (Datei > rechte Maustaste | Eigenschaften) ...
welche Größe ist die korrekte? Also
- Size oder
- Size on Disc

Vielen Dank schon einmal für Deine schnelle Hilfe.

Gruß,
Daniel

Verfasst: 22.05.2006 11:14
von Karl
Die Größe auf dem Datenträger hängt mit der Größe eines Blocks zusammen:

echteDateiGröße <= GrößeaufDatenträger

wegen Speichersegmentierung (das Problem heisst interne Fragmentierung).
Benutzt wird also die größere Größe.

Gruß Karl

Verfasst: 22.05.2006 13:55
von AND51
Karl, deine Blocks und die Speichersegmentierung nennt man auch Cluster :mrgreen:

Stimmt das so?

Verfasst: 22.05.2006 14:38
von Jilocasin
Es ist doch so...

- Die "Größe" bezieht sich auf den Inhalt der Datei, also die Bytes

- Die "Größe auf Datenträger" zeigt, wieviel Speicherplatz die Datei insgesammt zum Speichern auf dem Medium braucht.

...oder? /:->

Verfasst: 22.05.2006 14:46
von Karl
@Jilocasin: So isses.

@AND51: Die Cluster gibt es nur bei FAT und NTFS. Woanders heissen die schlicht Blöcke (z. B. inode).

Gruß Karl

Verfasst: 22.05.2006 17:41
von funk.munich
Hi zusammen,

vielen Dank für die Hilfe. Das funxt einwandfrei.

Ich habe nur noch folgendes Problem:

z.B. die HDD hat noch 4381 MB frei
Wenn ich das mit dem Taschenrechner ausrechne, um die Bytes zu erhalten
bekomme ich 4381 MB = 4381 * 1024 * 1024 = 4593811456 Bytes heraus.

Wenn ich das nun im Programm ausprobiere, erhalte ich immer:

4381 MB = 4381 * 1024 * 1024 = 298844160

Ich gehe mal davon aus, dass der Datentyp LONG nicht dafür geeignet ist.
Welche höheren Datentypen kann ich denn für PB sonst noch nutzen?

Im Handbuch wird sich nämlich nur auf Byte, Word, Long, Float.

Danke + Gruß,
Daniel

Verfasst: 22.05.2006 18:12
von roherter
PB 4.0

Code: Alles auswählen

 ;.q=quad-9223372036854775808 bis +9223372036854775807

test.q= 4381 * 1024 * 1024 
Debug test
:D

bei PB 3.94 nimmste einfach .f (Float)