如果我有两个目录A
和B
如何在OS X和Linux上的Haskell中判断它们是否在同一个文件系统上(例如在同一个硬盘上)?
我检查了System.Directory
和System.FilePath.Posix
这些似乎没有做任何事情。
答案 0 :(得分:2)
unix软件包中的getFileStatus
和deviceID
函数可以为您提供帮助。
答案 1 :(得分:2)
一种方法是利用stat
实用程序并自己编写一个包装器。 stat
可以为您的文件提供设备编号。我在Linux中测试了以下代码,它适用于不同的磁盘(但我对Mac OS不确定):
import Control.Applicative ((<$>))
import System.Process
statDeviceID :: FilePath -> IO String
statDeviceID fp = readProcess "stat" ["--printf=%d", fp] ""
-- for mac which has a different version of stat
-- statDeviceID fp = readProcess "stat" ["-f", "%d", fp] ""
checkSameDevice :: [FilePath] -> IO Bool
checkSameDevice xs = (\x -> all (== head x) x) <$> (sequence $ map statDeviceID xs)
paths = ["/mnt/Books", "/home/sibi"]
main = checkSameDevice paths >>= print
在ghci:
λ> main
False -- False since /mnt is a different hard disk