tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
365
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    M_Kay M_Kay ist offline Mitglied Silber
    Registriert seit
    Nov 2004
    Beiträge
    57
    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 ... sieht im Datei-Browser aber gut aus

    Weiss jemand wie es richtig geht?

    Gruss
    M_Kay
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    setLength reserviert den Plattenplatz, schreibt ihn jedoch nicht (direkt) voll.
    http://bugs.sun.com/bugdatabase/view...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
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    M_Kay M_Kay ist offline Mitglied Silber
    Registriert seit
    Nov 2004
    Beiträge
    57
    Hm, das scheint leider nicht zu funktionieren.
    Folgenden Code habe ich genutzt:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
            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^
    Geändert von M_Kay (08.10.08 um 16:59 Uhr)
     

  4. #4
    d4rkY89 d4rkY89 ist offline Mitglied Silber
    Registriert seit
    May 2008
    Beiträge
    72
    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.
     

  5. #5
    M_Kay M_Kay ist offline Mitglied Silber
    Registriert seit
    Nov 2004
    Beiträge
    57
    Hi d4rkY89. Das wäre meine Alternative gewesen. Aber hätte gedacht, dass es dafür bereits etwas gibt
     

Ähnliche Themen

  1. [C++] Speicher reservieren als Funktion
    Von Bumbbleman im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 14.07.09, 15:44
  2. Antworten: 8
    Letzter Beitrag: 28.06.09, 21:29
  3. NASM dynamisch Speicher reservieren
    Von Schnacki im Forum Sonstige Sprachen
    Antworten: 8
    Letzter Beitrag: 23.12.07, 13:15
  4. C++ Speicher für Feld reservieren
    Von kle-ben im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 12.11.05, 22:34
  5. Arbeitsspeicher reservieren
    Von Matze82 im Forum Java
    Antworten: 4
    Letzter Beitrag: 29.09.05, 15:27