Announcement

Collapse
No announcement yet.

Dateigröße ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dateigröße ermitteln

    Hallo,
    ich bin gerade dabei einen Dateimanager zu programmieren und ich möchte nun die Dateigrößen der einzelnen Dateien ermitteln.

    Spontan hätte ich vermutet, dass es bei System.IO.File eine entsprechende Funktion geben würde. Ich habe allerdings nichts Entsprechendes gefunden.

    Kann mir jemand weiterhelfen?

    Gruß majamigu
    Zuletzt editiert von Christian Marquardt; 27.12.2013, 14:07. Reason: Weiderhesrgestellt

  • #2
    http://msdn.microsoft.com/de-de/library/bb979120.aspx
    Christian

    Comment


    • #3
      Hallo,

      System.IO.File hat schon gepasst.

      [highlight=vbnet]
      Dim fi As New System.IO.FileInfo("MeineDatei.ext")
      Dim fileSize As Long = fi.Length
      [/highlight]

      mfG Gü
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        Vielen Dank für eure Antworten. Ich habe es eben mit dem Code von gfoidl ausprobiert und es hat funktioniert.

        Gruß majamigu

        Comment


        • #5
          Ich bin jetzt an der Stelle angekommen, wo ich auch noch gerne die Ordnergröße ausgeben lassen möchte. Gibt es dafür eine eigene Methode wie bei den Dateien oder muss ich dafür die ganzen Dateigrößen des Ordners und seiner Unterordner einzeln addieren?

          Gruß majamigu

          Comment


          • #6
            Ein Ordner selber hat ja keine Größe denn erst ist von der Struktur her gesehen eine Kompositon von Blättern (Dateien).

            D.h. du musst du größe für alle Dateien bestimmen und diese aufsummieren. Weiters ist zu prüfen ob der Ordner Unterordner besitzt und wenn ja diese auch prüfen (-> Rekursion).

            Windows macht es auch nciht anders.

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Das habe ich schon vermutet. Ja, dann bleibt mir wohl nichts anderes übrig, als das noch selbst zu programmieren.

              Sollte ich noch mal Fragen haben, was wahrscheinlich ist, dann werde ich mich melden.

              Gruß majamigu

              Comment


              • #8
                Sollte ich noch mal Fragen haben, was wahrscheinlich ist, dann werde ich mich melden.
                OK - wir warten


                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Ich bin noch bei dem Problem mit den Ordnergrößen. Könntest du mir vielleicht einen kleinen Denkanstoß geben, da ich noch mit Rekursion gearbeitet bzw. programmiert habe. Im Internet habe ich als Erkärung für Rekursion gefunden, dass es eine Funktion ist, die sich imme wieder selbst aufruft, bis das entsprechende Problem komplett vereinfach wurde.

                  In meinem mit den Ordnergrößen bräuchte man eine Funktion, die sich immer wieder aufruft, bis man zum letzten Unterordner gekommen ist, oder?

                  Vllt. kann mir ja jemand da weiterhelfen.

                  Gruß majamigu

                  Comment


                  • #10
                    Zum Thema Rekursion ein kleines Beispiel das einfach alle Files unterhalb eines Verzeichnisses sammelt und als Liste zurückgibt. Wie du siehst wird in der foreach Schleife die Funktion selbst immer wieder mit einer Subdirectory der Ausgangsdirectory aufgerufen womit du rekursiv alle Unterverzeichnisse durchläufst. Für dein Problem mußt du im Prinzip nur das Sammeln der Filenamen durch das aufaddieren der Dateigrößen ersetzen.

                    Beachten mußt du noch das bestimmte Dateien/Verzeichnis eventuell nicht zugreifbar sind(fehlende Rechte etc.) du mußt also auch noch ein Exceptionhandling einbauen, insbesondere um die Aufrufe von "parentDirectory.GetFiles" sowie "parentDirectory.GetDirectories".

                    [Highlight=VB.NET]Private Function GetFiles(ByVal parentDirectory As DirectoryInfo) As IEnumerable(Of String)
                    Dim files As New List(Of String)
                    files.AddRange(From f In parentDirectory.GetFiles Select f.FullName)

                    For Each childDirectory In parentDirectory.GetDirectories
                    files.AddRange(GetFiles(childDirectory))
                    Next

                    Return files
                    End Function[/Highlight]


                    Vorsicht mit dem Code bin eigentlich in C# zu Hause.
                    Zuletzt editiert von Ralf Jansen; 07.07.2009, 22:30.

                    Comment


                    • #11
                      Du baust dir eine Funktion nach folgendem schema:

                      Code:
                      Funktion Ordnergroesse(Pfad zum Ordner als String) als Integer
                      temp  als integer
                      Für jede Datei im Ordner
                        temp += Dateigröße
                      
                      Für jeden Ordner im Ordner
                        temp += Ordnergroesse <-- rekursiver aufruf der Funktion
                      return temp
                      Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                      Comment


                      • #12
                        Vielen Dank erstmal für eure Antworten. Ich werde die beiden Lösungen gleich mal ausprobieren und dann mein Feedback geben.

                        Gruß majamigu

                        Comment


                        • #13
                          Ich habe eben den Code von Ralf genommen und noch etwas auf meine eigenen "Bedürfnisse" umgeschrieben. Es hat wunderbar funktioniert. Nochmals danke für eure Hilfe.

                          Gruß majamigu

                          Comment


                          • #14
                            Ich bin jetzt an der Stelle angekommen, wo ich mir Gedanken darüber machen muss, ob ich die Einstellungen, die man als Benuter der Anwendung treffen kann, als Ressourcen (sprich: in der Registry) oder in einer einfachen Datei speichern sollte.

                            Soweit ich weiß, müllt die erste Variante die Registry etwas voll und kann manchmal den Bootvorgang des Rechners verlangsamen. Von daher wäre ja eigentlich eine Datei, welche die ganzen Einstellungen speichert, praktischer, oder? Wie seht ihr das bzw. was würdet ihr mir empfehlen ?

                            Gruß majamigu

                            Comment


                            • #15
                              http://msdn.microsoft.com/de-de/library/a65txexh.aspx

                              Comment

                              Working...
                              X