背景
iOS App偶現(xiàn)Documents目錄下的某個子目錄文件在極偶現(xiàn)的情況下出現(xiàn)丟失的情況昔榴,懷疑可能是其他模塊將其刪除了妓肢,所以想通過設(shè)置子目錄文件的權(quán)限為只讀權(quán)限捌省,阻止誤刪的發(fā)生。
NSFileManager相關(guān)API
/* setAttributes:ofItemAtPath:error: returns YES when the attributes specified in the
'attributes' dictionary are set successfully on the item specified by 'path'. If this
method returns NO, a presentable NSError will be provided by-reference in the 'error'
parameter. If no error is required, you may pass 'nil' for the error.
This method replaces changeFileAttributes:atPath:.
*/
- (BOOL)setAttributes:(NSDictionary<NSFileAttributeKey, id> *)attributes
ofItemAtPath:(NSString *)path
error:(NSError **)error
API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
NSFilePosixPermissions取值說明
Number | 權(quán)限說明 | Ref |
---|---|---|
0 | No permission | --- |
1 | Execute permission | --x |
2 | Write permission | -w- |
3 | Execute and write permission: 1 (execute) + 2 (write) = 3 | -wx |
4 | Read permission | r-- |
5 | Read and execute permission: 4 (read) + 1 (execute) = 5 | r-x |
6 | Read and write permission: 4 (read) + 2 (write) = 6 | rw- |
7 | All permissions: 4 (read) + 2 (write) + 1 (execute) = 7 | rwx |
只讀屬性
NSDictionary *attributes = @{ NSFilePosixPermissions : @(0544) };
NSFileManager *manager = [NSFileManager defaultManager];
BOOL success = [manager setAttributes:attributes ofItemAtPath:path error:error];
讀寫屬性
NSDictionary *attributes = @{ NSFilePosixPermissions : @(0755) };
NSFileManager *manager = [NSFileManager defaultManager];
BOOL success = [manager setAttributes:attributes ofItemAtPath:path error:error];
PS
- 網(wǎng)上說的將
NSFilePosixPermissions
設(shè)置成@(0444)
就可以了碉钠,但是我在測試時纲缓,如果直接設(shè)置成會@(0444)
,結(jié)果返回YES
喊废,但同時也會將目錄里的文件和子目錄清空祝高,這肯定是不行的。 - 當(dāng)設(shè)置目錄訪問權(quán)限為
@(0544)
后污筷,刪除目錄內(nèi)的非目錄文件會提示權(quán)限不夠工闺;但是如果刪除子目錄內(nèi)的文件則不會提醒權(quán)限,還是會刪除成功瓣蛀。所以為了保證刪除設(shè)置目錄內(nèi)的任意文件都提示權(quán)限不夠陆蟆,應(yīng)該遞歸的將所有子目錄的訪問權(quán)限也同時設(shè)置成只讀。 -
NSFilePosixPermissions
更多的細(xì)節(jié):https://www.tutorialspoint.com/unix/unix-file-permission.htm