Nun FileMode
ist ein Typalias für CMode
mit einer 32-Bit-Nummer. Das Paket enthält ferner Konstanten wie ownerReadMode
, ownerWriteMode
, ownerExecuteMode
; groupReadMode
, groupWriteMode
, groupExecuteMode
; otherReadMode
, otherWriteMode
und otherExecuteMode
.
Sie können die Schnittmenge mit intersectFileModes :: FileMode -> FileMode -> FileMode
ermitteln. Wenn die Schnittmenge mit einer der Konstanten dieselbe wie diese Konstante ist, dann hat die Datei diesen Modus.
Zum Beispiel:
Um es bequemer zu machen, können wir eine Funktion definieren:
import System.Posix.Types(FileMode)
import System.Posix.Files.ByteString(intersectFileModes)
hasMode :: FileMode -> FileMode -> Bool
hasMode fa fb = intersectFileModes fa fb == fa
Also dann hasMode ownerReadMode
funktioniert einen Dateimodus überprüfen und True
zurück, wenn der Dateimodus, dass die Erlaubnis enthält , sonst False
.
Jetzt können wir das obige Programm umschreiben als:
import System.Posix.Types(FileMode)
import System.Posix.Files(getFileStatus,fileMode,ownerReadMode)
import System.Posix.Files.ByteString(intersectFileModes)
hasMode :: FileMode -> FileMode -> Bool
hasMode fa fb = intersectFileModes fa fb == fa
main = do
fs <- getFileStatus "../README.md"
if hasMode ownerReadMode (fileMode fs)
then print "owner can read"
else print "owner can not read"