在應用程序執行時,經常需要本地化保存一些重要的數據,這時就有可能需要創建一些目錄。Objective-C提供了一個非常強大的創建目錄的接口:
- (
BOOL
)createDirectoryAtPath:(
NSString
*)path withIntermediateDirectories:(
BOOL
)createIntermediates attributes:(
NSDictionary
*)attributes error:(
NSError
**)error;
|
很多人使用這個接口時,往往將attributes參數設置為nil,這樣雖然能夠創建出目錄,但是在一些特殊場景下(比如iPhone的apps)所創建的目錄的屬性往往不是我們期望的,因而導致目錄的讀寫失敗等問題。其實通過設置attributes參數,這個接口可以完成我們的期望。
根據蘋果官方文檔介紹,這個參數可以設置所創建目錄所屬的用戶和用戶組,目錄的訪問權限和修改時間等。如果設置為nil,那么所創建目錄的屬性則采用系統默認設置,一般會將目錄的用戶設置為root,訪問權限設置為0755,這樣就導致其他用戶向這個目錄寫入時失敗。
attributes參數是一個字典類型。查看蘋果官方文檔的介紹,可以看到在NSFileManager.h頭文件定義了很多常量字符串,用於作為attributes字典的鍵,針對於這個接口的鍵主要包括下面幾個:
NSString
*
const
NSFileType
;
NSString
*
const
NSFileSize
;
NSString
*
const
NSFileModificationDate
;
NSString
*
const
NSFileReferenceCount
;
NSString
*
const
NSFileDeviceIdentifier
;
NSString
*
const
NSFileOwnerAccountName
;
NSString
*
const
NSFileGroupOwnerAccountName
;
NSString
*
const
NSFilePosixPermissions
;
NSString
*
const
NSFileSystemNumber
;
NSString
*
const
NSFileSystemFileNumber
;
NSString
*
const
NSFileExtensionHidden
;
NSString
*
const
NSFileHFSCreatorCode
;
NSString
*
const
NSFileHFSTypeCode
;
NSString
*
const
NSFileImmutable
;
NSString
*
const
NSFileAppendOnly
;
NSString
*
const
NSFileCreationDate
;
NSString
*
const
NSFileOwnerAccountID
;
NSString
*
const
NSFileGroupOwnerAccountID
;
NSString
*
const
NSFileBusy
;
|
本文不打算翻譯蘋果的官方文檔,只把我們比較關心的幾個鍵的意義說明如下:
- NSFileAppendOnly
這個鍵的值需要設置為一個表示布爾值的NSNumber對象,表示創建的目錄是否是只讀的。
- NSFileCreationDate
這個鍵的值需要設置為一個NSDate對象,表示目錄的創建時間。
- NSFileOwnerAccountName
這個鍵的值需要設置為一個NSString對象,表示這個目錄的所有者的名字。
- NSFileGroupOwnerAccountName
這個鍵的值需要設置為一個NSString對象,表示這個目錄的用戶組的名字。
- NSFileGroupOwnerAccountID
這個鍵的值需要設置為一個表示unsigned int的NSNumber對象,表示目錄的組ID。
- NSFileModificationDate
這個鍵的值需要設置一個NSDate對象,表示目錄的修改時間。
- NSFileOwnerAccountID
這個鍵的值需要設置為一個表示unsigned int的NSNumber對象,表示目錄的所有者ID。
- NSFilePosixPermissions
這個鍵的值需要設置為一個表示short int的NSNumber對象,表示目錄的訪問權限。
- NSFileReferenceCount
這個鍵的值需要設置為一個表示unsigned long的NSNumber對象,表示目錄的引用計數,即這個目錄的硬鏈接數。
這樣,通過合理的設計attributes字典中的不同鍵的值,這個接口所創建的目錄的屬性就會基本滿足我們的需求了。