【发布时间】:2011-08-02 23:35:01
【问题描述】:
我想知道如何以最少的开销在 haskell 中获取文件的大小。现在我有以下代码:
getFileSize :: FilePath -> IO Integer
getFileSize x = do
handle <- openFile x ReadMode
size <- hFileSize handle
hClose handle
return size
这似乎很慢。我在 System.Posix.Files 中偶然发现了 getFileStatus,但不知道它是如何工作的——至少我在 ghci 中使用它时只会出错。另外,我不确定这是否适用于 Windows(可能不会)。
所以重申一下:在 Haskell 中获取文件大小的最佳(和平台无关)方法是什么?
【问题讨论】:
-
上述解决方案的另一个问题是,只有在可以读取的情况下才能获取文件的大小。
-
没错。我是 Haskell 新手,这是我发现的第一个函数。当然,我也遇到了各种权限问题。
-
将文件大小用于显示目的之外的任何事情都是脆弱的。如果您获得文件大小,然后将其用于对文件进行操作,则无法保证在您处理文件时文件具有相同的大小。
-
顺便说一句,
getFileStatus "your_file_path" >>= print . fileSize(来自 System.Posix.Files)应该为您提供 GHCi 的大小(即使您没有读取权限)。也许值得 Dan unix-compat 推荐的尝试(它应该在 Windows 上工作)。
标签: haskell filesystems io