我有一个在root下运行的应用程序并更改了一些由用户创建的文件。 问题是在使用我的应用程序编辑文件后,它会成功保存,但会更改文件的所有者。 所以在编辑文件之前是:
-rw-------@ 1 myusername wheel 2418 Jun 18 18:29 myfile.plist
编辑后:
-rw-------@ 1 root wheel 2418 Jun 18 18:29 myfile.plist
以下是我编辑文件的代码:
NSMutableDictionary* myFile = [NSMutableDictionary dictionaryWithContentsOfFile:@"myFile.plist"];
[myFile setObject:@"some text" forKey:@"some key"];
BOOL result = [myFile writeToFile:@"myFile.plist" atomically:YES];
即使在root下使用app进行编辑,我也需要保留文件的所有者。 我怎样才能解决上面的问题?
编辑:我尝试了以下代码并返回成功结果,但没有更改权限:
NSDictionary *properties = [[NSFileManager defaultManager] attributesOfItemAtPath:@"myfile.plist"
error:nil];
NSMutableDictionary *newProperties = [NSMutableDictionary dictionaryWithDictionary:properties];
[newProperties setObject:@"myusername" forKey:NSFileOwnerAccountName];
NSError *error = nil;
BOOL result = [[NSFileManager defaultManager] setAttributes:newProperties
ofItemAtPath:@"myfile.plist"
error:&error];
答案 0 :(得分:1)
我相信只有attributesOfItemAtPath
才接受NSNumber对象的权限。请尝试使用AccountID:( NSFileOwnerAccountID 和/或 NSFileGroupOwnerAccountID ):
NSMutableDictionary *newProperties = [NSMutableDictionary dictionaryWithDictionary:properties];
[newProperties setObject:[NSNumber numberWithInt:0] forKey:NSFileOwnerAccountID];
来自Apples文档:
NSFilePosixPermissions值必须初始化为 表示POSIX文件权限位模式的代码,其中 相应的值是NSNumber对象。
答案 1 :(得分:0)
您可以使用setAttributes:ofItemAtPath:error:
的{{1}}方法,其属性为NSFileManager
:
NSFileImmutable
希望这有帮助!