2017-01-30 6 views
1

私は最近Goでファイルモードとアクセス権を持っていましたが、ファイルを取得するときに出力につまずくようになりました。Goでファイル許可マスク

次のコード:

for _, file := range files { 
    fmt.Println(file.Mode()) 
} 

は出力を生成します。

drwx------ 
Lrwxr-xr-x 
drwxr--r-- 
drwx------ 
drwx------ 
prw-r--r-- 
Srw-rw-rw- 
Srw-rw-rw- 
-rw-r--r-- 

私の質問はどのように私は0777のような数字で許可を得るか、など

ではのような類似した方法はありますこの答えで提供されるPythonで:How can I get a file's permission mask?

答えて

6

ファイルモード(FileInfo.Mode())を取得したら、FileMode.Perm()メソッドを使用します。これは、タイプos.FileModeの値を返します。値はuint32です。

あなたが探しているフォーマット(たとえば0777)は、ベース8にあります。 fmt.Printf()動詞を%oに設定して、8進数形式(8進数)で数値を出力します。幅を4にして4桁にし、フラグ0を使用して0のパッドを埋めます。したがって、ファイルのアクセス権を印刷するためのフォーマット文字列は、"%04o"です。

だから、このようにそれを印刷:

files, err := ioutil.ReadDir(".") 
// Handle err 

for _, file := range files { 
    fmt.Printf("%s %04o %s\n", file.Mode(), file.Mode().Perm(), file.Name()) 
} 

出力例:

-rw-rw-r-- 0664 play.go 
drwxrwxr-x 0775 subplay 
関連する問題