2014-06-20 2 views
0

나는 루트에서 실행되는 응용 프로그램을 가지고 있으며 사용자가 만든 일부 파일을 변경합니다. 문제는 내 응용 프로그램을 사용하여 파일을 편집 한 후 성공적으로 저장되지만 파일 소유자가 변경된다는 것입니다. 편집 그래서 전에 파일이었다NSFileManager 변경 파일 소유자/사용 권한

NSMutableDictionary* myFile = [NSMutableDictionary dictionaryWithContentsOfFile:@"myFile.plist"]; 
[myFile setObject:@"some text" forKey:@"some key"]; 
BOOL result = [myFile writeToFile:@"myFile.plist" atomically:YES]; 

심지어 편집 한 후 파일의 소유자를 유지해야합니다 여기

[email protected] 1 root wheel 2418 Jun 18 18:29 myfile.plist 

내가 파일을 편집 방법 코드 : 편집 후

[email protected] 1 myusername wheel 2418 Jun 18 18:29 myfile.plist 

루트 아래에있는 앱을 사용합니다. 위의 문제를 어떻게 해결할 수 있습니까?

편집 : 나는 다음과 같은 코드를 시도하고 성공적인 결과를 반환하지만 권한을 변경하지 않습니다

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]; 

답변

1

난 단지의 NSNumber 객체 attributesOfItemAtPath 허용되는 권한에 대한 생각합니다. 대신 계정 ID 사용해보십시오 : (NSFileOwnerAccountID 및/또는 NSFileGroupOwnerAccountID 일) : 사과에서

NSMutableDictionary *newProperties = [NSMutableDictionary dictionaryWithDictionary:properties]; 
      [newProperties setObject:[NSNumber numberWithInt:0] forKey:NSFileOwnerAccountID]; 

문서 : 값이 는 POSIX의 파일 -을 나타내는 코드로 초기화해야합니다

NSFilePosixPermissions 사용 권한 비트 패턴은 이며 해당 값은 NSNumber 객체입니다.

참조 : NSFileOwnerAccountID

0

당신은 NSFileImmutable의 속성과 NSFileManagersetAttributes:ofItemAtPath:error: 방법을 사용할 수 있습니다 :이 도움이

NSDictionary* attribs = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSFileImmutable]; 
[[NSFileManager defaultManager] setAttributes: attribs ofItemAtPath:@"/path/to/file" error:nil]; 

희망!