2017-06-16 51 views
1

我們如何獲得文件屬性?我主要是想獲得大小,但也是它的最後訪問時間和其他屬性。如何在Common Lisp中獲取文件大小(以及其他屬性)?

我只找到(file-length some-file)那得到的流,以便用於這種方式:

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

看起來是做了工作,但:

  • 它會流:這是未粘附,其餘的api
  • 真的沒有更短的功能?
  • (這是最有效的方式呢?)

我什麼也看不到相關的文件長度或Osicat屬性。也許是它的作用,我會填寫一個功能請求?

Practical CL關於文件長度的討論,指的是Osicat,就是這樣。

沒有關於CL cookbook的更多信息,awesome-cl列表中沒有更多的「posix」或「文件」相關材料。

我將不勝感激like in elisp

感謝

編輯:也許在iolib但它看起來像its online doc是uncomplete而不是在談論文件,即使它宣佈於具有「路徑名庫和文件系統工具」。但很顯然,它沒有做什麼,我正在尋找:https://github.com/sionescu/iolib/blob/master/src/os/os-unix.lisp

回答

2

隨着Osicat,您撥打的文件stat,你會得到一堆東西中的結構:

(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 

您可以訪問不同的插槽具有以下功能:

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

太好了,所以有。但它在文檔中嗎?我看不到它。我不能使用它:'(osicat:stat'不存在(沒有選項卡完成或「符號STAT不是外部的...」)和'(osicat :: stat myfile)'是相反的:完成ok,但是on輸入「功能osicat :: stat是不確定的」:/ – Ehvince

+0

好吧,它是'osicat-posix:stat'。謝謝! – Ehvince

+0

現在可以做一對夫婦相關的PR ... – Ehvince