首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查haskell中两个目录是否位于同一个文件系统上

问检查haskell中两个目录是否位于同一个文件系统上
EN

Stack Overflow用户
提问于 2014-08-15 20:57:52
回答 2查看 153关注 0票数 1

如果我有两个目录-- A和B --如何判断它们是否位于OS和linux中的同一个文件系统(例如相同的硬盘上)?

我检查了System.Directory和System.FilePath.Posix,它们似乎没有做这个的任何事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-15 21:48:25

unix包中的getFileStatus和deviceID函数应该可以帮助您实现这一点。

票数 3
EN

Stack Overflow用户

发布于 2014-08-15 21:57:42

一种方法是利用stat实用程序并自己为它编写一个包装器。stat能够为您的文件提供设备编号。我在Linux中测试了以下代码,它适用于不同的磁盘(但我不确定它是否适用于Mac ):

代码语言:javascript
复制
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:

代码语言:javascript
复制
λ> main
False   -- False since /mnt is a different hard disk
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25334127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档