Datei mit fester Größe erstellen

Anfängerfragen zum Programmieren mit PureBasic.
funk.munich
Beiträge: 123
Registriert: 27.03.2006 09:45

Datei mit fester Größe erstellen

Beitrag 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
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag 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
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag 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:
Purebasic 5.0 32bit und 64 bit

I'm back from hell
funk.munich
Beiträge: 123
Registriert: 27.03.2006 09:45

Beitrag 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
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag 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
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Karl, deine Blocks und die Speichersegmentierung nennt man auch Cluster :mrgreen:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Stimmt das so?

Beitrag 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? /:->
Bild
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag 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
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
funk.munich
Beiträge: 123
Registriert: 27.03.2006 09:45

Beitrag 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
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag 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)
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Antworten