Dateigrösse abfragen

Startseite Foren Deutsches LiveCode-Forum Dateigrösse abfragen

Ansicht von 9 Antwort-Themen
  • Autor
    Beiträge
    • #2507
      guko56
      Teilnehmer

        Hallo
        Eine Frage an die Spezialisten, wie kann man in LiveCode
        die Dateigrösse ( in Byte oder KByte ) einer txt-Datei abfragen.
        Gruß Günter

      • #2511
        Klaus Major
        Administrator

          Hallo Günther,

          wenn Sie mal schauen möchten, getestet und kunktioniert 🙂

          on mouseUp
             answer file "Bitte Datei auswählen:"
             
             ## User hat CANCEL geklickt!
             if it = EMPTY then
                exit mouseup
             end if
             put it into tFile
             
             ## Siehe unten, Funktion liefert Dateigröße zurück:
             answer wie_gross(tFile)
          end mouseUp
          
          function wie_gross tFile
             ## Zunächst den Namen der Datei merken, den benötigen wir gleich noch:
             set itemdel to "/"
             put item -1 of tFile into tDateiName
             
             ## Nun den Ordner ermitteln, in dem die Datei liegt:
             delete item -1 of tFile
             ## Übrig bleibt der Ordnername! :-)
             
             ## Itemdelimiter wieder auf KOMMA setzen, sonst kalpp der Rest des Skriptes nicht!
             set itemdel to ","
             
             ## Guter Stil, immer alles so zurücklassen, wie wie es vorgefunden haben!
             ## Hier sollten wir daher später "the directory" wieder auf den "Anfangszustand" versetzen!
             put the directory into tOldDir
             
             ## Jetzt geht es ans Eingemachte!
             ## DETAILLIERTEN Inhalt dieses Ordner abfragen:
             set the directory to tFile
             put the LONG files into tLongFiles
             
             ## Bitte LONG files im Dictionary nachschlagen!
             ## Dateinamen werden URLENCODED geliefert mit LONG FILES:
             put urlencode(tDateiName) into tURLDatei
             put lineoffset(tURLDatei,tLongFiles) into tZeile
             
             ## Als Programmiere müssen wir uns leider um JEDEN Scheisss kümmern, also:
             if tZeile = 0 then
                beep
                
                ## Datei nicht vorhanden, warum auch immer? Dann weg hier :-)
                exit to top
             end if
             
             ## OK, Datei vorhanden, weiter gehts:
             put line tZeile of tLongFiles into tZeileMitDatei
             put item 2 of tZeileMitDatei into tGroesse
          
             ## Siehe oben, von wegen guter Stil und so...
             set the directory to tOldDir
             
             ## Gefunden, nun diese Info zurückliefern, aber erst nett aufbereiten, 
             ## vielleicht noch auf- oder abrunden, aber das kannst Du selber machen :-)
             return tGroesse/1024 && "kb"
          end wie_gross

          Gruß

          Klaus

        • #2513
          guko56
          Teilnehmer

            Hallo Klaus
            Vielen Dank, werde es gleich mal probieren.
            Gruß Günter

          • #2515
            Torsten
            Teilnehmer

              Hallo Klaus,

              geht es nicht einfacher? Ich finde, der Weg über die Directory-Ausgabe ist meines Erachtens durch die Brust ins Auge geschossen 😉

              Das ist im Beispiel für den Progress Bar ja auch schon so demonstriert: http://lessons.livecode.com/s/lessons/m/4071/l/11887-how-do-i-use-a-progress-bar

              Erstaunlich, dass Livecode hier bisher noch kein einfacheres Kommando eingebaut hat, z.B. „get the size of tFilename“, wie bei den Image-Files: http://de.livecode.wikia.com/wiki/Size

              Am Ende des Artikels ist allerdings ein Hinweis:
              To get the true size of such an image, either use the detailed files, or check the length of the file url.

              Was meinen die mit „check the length of the file url“? Ist das vielleicht ein einfacher Weg?

            • #2517
              hauke
              Administrator

                Hallo Torsten,

                yes we can 🙂

                put the length of url „binfile:C:\myFilename.xyz“ into myFileSize

                Sollte funktionieren. Ist doch das, was Du meinst, oder?

                Grüße

                Hauke

              • #2521
                Klaus Major
                Administrator

                  Nein, einfacher geht es leider nicht, ich würde es euch sagen, ehrlich! 😎

                  Und „length…“ lädt die gesamte Datei zuerst einmal in den RAM und fängt dann erst an, nachzumessen.
                  Könnt ihr ja gerne mal mit einem XX GB großen MP4 Video o.ä. versuchen 🙂

                  Und leider funktioniert die neue Files(directory) Syntax noch nicht mit LONG files.
                  Das hätte ein paar Zeilen gespart.

                • #2523
                  hauke
                  Administrator

                    Naja, es funktioniert schon und kann bei kleinen Dateien, von denen man von jeweils einer einmalig die Größe benötigt, durchaus sinnvoll sein. Aber hat natürlich auch Nachteile – es kommt eben immer auf den Verwendungszweck an.

                  • #2525
                    Torsten
                    Teilnehmer

                      Danke Hauke,

                      das ist doch für Dateien, die man kennt, eine schöne Lösung. Für den Extremfall, den Klaus beschreibt, etwas problematisch, aber für den Normalfall eigentlich ganz gut.

                      Ein Problem bleibt aber immer noch der Fall, dass man eine Datei aus dem Internet laden und dafür eine Fortschrittsanzeige mittels Progress Bar einsetzen will.

                      Wie kann man das machen?

                    • #2527
                      Klaus Major
                      Administrator

                        Die Lösung von mir ist verdammt schnell, wahrscheinlich schneller als eine Datei mal eben in den RAM zu laden.

                        Ein Problem bleibt aber immer noch der Fall, dass man eine Datei aus dem Internet laden und dafür eine Fortschrittsanzeige mittels Progress Bar einsetzen will.
                        Wie kann man das machen?

                        Das macht man mit dem Befehl „load url“die_zu_ladende_url“, denn der ist asynchron, und während des Ladens fragt man periodisch „urlstatus(die_zu_ladende_url)“ ab und füttert seinen Scrollbar mit den Daten bzw. ragiert auf Fehlermeldungen etc.

                        Siehe „urlstatus“ im Dictionary.

                      • #2536
                        Torsten
                        Teilnehmer

                          Hi Klaus,

                          dass die Directory-Lösung super funktioniert, glaube ich gerne 🙂

                          Ich wundere mich nur, dass so eine vergleichsweise einfache Frage vom normalen User mit so einer komplexen Prozedur selbst gelöst werden muss. Ein Einsteiger, der keinen Zugang zu einem so tollen Forum wie diesem hier hat, muss an sowas lange knabbern.

                          Warum ist genau diese Vorgehensweise von Livecode nicht schon in eine fertige Funktion umgesetzt worden, das liegt doch nahe, oder?

                          Ein normaler Anfänger wundert sich, weil so viele andere viel komplexere Funktionen wie das Hochladen einer FTP-Datei ja auch elegant gelöst wurden.

                      Ansicht von 9 Antwort-Themen
                      • Du musst angemeldet sein, um auf dieses Thema antworten zu können.