如何在Common Lisp中获取文件大小(和其他属性)?

时间:2017-06-16 15:15:28

标签: 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”或“file”相关资料。

我会很感激like in elisp

感谢

编辑:可能在iolib上,但看起来its online doc未完成,并且没有谈论文件,即使它宣布拥有“路径名库和文件系统实用程序”。但显然它没有做我正在寻找的东西:https://github.com/sionescu/iolib/blob/master/src/os/os-unix.lisp

1 个答案:

答案 0 :(得分: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