# Speicherplatz reservieren



## M_Kay (7. Oktober 2008)

Hi,

ich wollte mal fragen, wie man am einfachsten Speicherplatz für eine Datei reservieren kann. Wenn man also weiss, dass man gleich 200 MB auf die Platte schreibt, dann sollte man ja dafür sorgen, dass dieser Platz auch frei ist und nicht im Hintergrund von einem anderen Programm verbraucht wird.

Ich habe es mit RandomAccessFile.setLength() versucht. Unter Linux zeigt er mir auch die festgelegte Dateigröße der Datei an.
Das komische ist aber, dass ich die Größe auf 100 GB setzen kann, obwohl die Partition, auf der sich die Datei befindet, gerade mal 50 GB groß ist :suspekt: ... sieht im Datei-Browser aber gut  aus 

Weiss jemand wie es richtig geht?

Gruss
M_Kay


----------



## Thomas Darimont (8. Oktober 2008)

Hallo,

setLength reserviert den Plattenplatz, schreibt ihn jedoch nicht (direkt) voll.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4057701

Könntest ja mal versuchen mit setLength die entsprechende Größe zu definieren und dann mit seek bis ans Ende zu springen. Wenn da ne Exception kommt ist eben nicht mehr genug Platz frei.

Gruß Tom


----------



## M_Kay (8. Oktober 2008)

Hm, das scheint leider nicht zu funktionieren.
Folgenden Code habe ich genutzt:
	
	
	



```
long bytesNum = 153687091200L;
        try {
            RandomAccessFile raf = new RandomAccessFile(new File("/home/mkay/writefile"), "rw");
            raf.setLength(bytesNum);
            raf.seek(bytesNum);
            raf.write(new byte[] {00});
        } catch (Exception exc) {
            exc.printStackTrace();
        }
```
Das erzeugt bei mir unter Kubuntu eine ca. 140 GB große Datei auf einer 50GB-Partition 
Sonst evtl. noch eine Idee? 

EDIT: Eine Exception wird nicht geworfen^


----------



## d4rkY89 (9. Oktober 2008)

Du könntest erst mal Prüfen, ob der geforderte Platz überhaupt auf der Festplatte noch frei ist ( file.getUsableSpace(); ). Falls genügend Speicher vorhanden ist lässt du einfach eine Datei mit der gewünschten Größe mit Nullbytes vollschreiben. Bei 200 MB ( oder auch mehr ) sollte das nur wenige Sekunden dauern. Danach kann man mit nem RandomAccessFile die Nullbytes mit den gewünschten Daten überschreiben.


----------



## M_Kay (9. Oktober 2008)

Hi d4rkY89. Das wäre meine Alternative gewesen. Aber hätte gedacht, dass es dafür bereits etwas gibt


----------

