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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.