2017-08-05 3 views

Antwort

2

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" 
Verwandte Themen