2017-06-16 1 views
1

Wie erhalten wir Dateiattribute? Ich suche primär nach der Größe, aber auch nach der letzten Zugriffszeit und anderen Attributen.Wie bekomme ich eine Dateigröße (und andere Attribute) in Common Lisp?

Ich fand nur (file-length some-file), die so einen Strom bekommt verwendet, um diese Art und Weise:

(with-open-file (file "some file name") 
    (file-length file)) 

Sieht die Arbeit zu tun, aber:

  • es einen Strom bekommt: Das ist uncoherent mit dem Rest der api
  • gibt es wirklich keine kürzere Funktion ??
  • (es ist der effizienteste Weg,? Zu tun) zu einer Dateilänge oder Attribute in Osicat Zusammenhang

Ich sehe nichts. Vielleicht ist es seine Rolle und ich werde eine Feature-Anfrage ausfüllen?

Practical CL spricht über Dateilänge und bezieht sich auf Osicat und das ist es.

Keine weiteren Informationen über die CL cookbook, nicht mehr "Posix" oder "Datei" bezogenen Material auf der awesome-cl Liste.

Ich würde etwas schätzen like in elisp.

dank

bearbeiten: vielleicht auf iolib aber es sieht aus wie its online doc uncomplete und sprechen nicht über Dateien, auch wenn es „ein Pfad Bibliothek und Datei-System-Utilities“ zu haben, verkündet. Aber anscheinend hat es nicht tun, was ich suche: https://github.com/sionescu/iolib/blob/master/src/os/os-unix.lisp

Antwort

2

Mit Osicat, rufen Sie stat auf die Datei und Sie bekommen ein paar Dinge in einer Struktur:

(describe (osicat-posix:stat #P"/tmp/file")) 

#<OSICAT-POSIX:STAT {1004F20C93}> 
    [standard-object] 

Slots with :INSTANCE allocation: 
    DEV  = 2065 
    INO  = 7349974 
    MODE  = 33204 
    NLINK = 1 
    UID  = 1000 
    GID  = 1000 
    RDEV  = 0 
    SIZE  = 4304 
    BLKSIZE = 4096 
    BLOCKS = 16 
    ATIME = 1497626097 
    MTIME = 1497347216 
    CTIME = 1497347216 
; No value 

Sie können den Zugriff auf verschiedene Steckplätze mit folgenden Funktionen:

osicat-posix:stat-dev 
osicat-posix:stat-gid       
osicat-posix:stat-ino       
osicat-posix:stat-uid       
osicat-posix:stat-mode      
osicat-posix:stat-rdev      
osicat-posix:stat-size      
osicat-posix:stat-atime      
osicat-posix:stat-ctime      
osicat-posix:stat-mtime      
osicat-posix:stat-nlink      
osicat-posix:stat-blocks      
osicat-posix:stat-blksize      
+0

Großartig, so ist es. Aber ist es in dem Dokument? Ich kann es nicht sehen. Ich kann es nicht verwenden: '(osicat: stat' existiert nicht (keine Tabulatorvervollständigung oder" das Symbol STAT ist nicht extern ... ") und' (osicat :: stat myfile) 'ist das Gegenteil: Vervollständigung ok, aber an Geben Sie "die Funktion osicat :: stat is undefined" ein:/ – Ehvince

+0

Alles klar, es ist 'osicat-posix: stat'. Danke! – Ehvince

+0

Man könnte auch ein paar doc-bezogene PRs machen ... – Ehvince