ios - 修改 NSFileManager 中文件的 NSFileGroupOwnerAccountID 属性未得到更新
<p><p>我需要修改我的文件属性。有一个属性 <code>NSFileGroupOwnerAccountID</code> 苹果说它可以修改,但是当我修改它时,它没有得到更新。
我也试过先修改权限为0777,还是不行。</p>
<p><strong>代码:</strong></p>
<pre><code> NSFileManager *filemgr;
NSDictionary *attribs;
NSArray *dirPaths;
NSString *docsDir;
filemgr =;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = ;
NSArray * filePathsArray = [ contentsOfDirectoryAtPath: docsDirerror:NULL];
NSError *error;
for(int i=0;i<;i++)
{
NSString *filePath = ;
NSString *fullPath = ];
attribs = [filemgr attributesOfItemAtPath:
docsDir error: NULL];
NSLog (@"POSIX Permissions %@", );
NSMutableDictionary *attributes = ;
forKey:NSFilePosixPermissions]; // chmod permissions 777
[setAttributes:attributes ofItemAtPath:docsDir error:&error];
NSLog(@"updated: %@",[filemgr attributesOfItemAtPath:
docsDir error: NULL]);
NSDictionary *dict2 = [filemgr attributesOfItemAtPath:
docsDir error: NULL];
NSMutableDictionary *attributes2 = ;
forKey:NSFileGroupOwnerAccountID];
[setAttributes:attributes2 ofItemAtPath:docsDir error:&error];
NSLog(@"updated2: %@",[filemgr attributesOfItemAtPath:
docsDir error: NULL]);
}
</code></pre>
<p>"<strong><a href="https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/nsfilemanager_class/Reference/Reference.html#//apple_ref/doc/uid/20000305-SW4" rel="noreferrer noopener nofollow">URL</a> </strong>"</p>
<p><strong>更新 2:</strong></p>
<p>只修改单个属性:</p>
<pre><code> NSMutableDictionary *attributes = ;
forKey:NSFileGroupOwnerAccountID];
BOOL check= [setAttributes:attributes ofItemAtPath:docsDir error:&error];
</code></pre>
<p>还是报错:</p>
<pre><code>Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn’t be completed. (Cocoa error 513.)" UserInfo=0x8d0b900 {NSFilePath=/Users/a/Library/Application Support/iPhone Simulator/7.1/Applications/81ADKJ1A2-B612-4784-9524-05456F323212/Documents, NSUnderlyingError=0x8d11b80 "The operation couldn’t be completed. Operation not permitted"}
</code></pre>
<p>请建议如何修改属性。</p>
<p>提前致谢。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>除非您以 super 用户身份运行,否则您只能更改您拥有的文件组。此外,您只能将群组更改为您所属的群组。</p>
<p>您不应使用包含文件当前属性的字典。构造一个只包含您要更改的属性的字典。否则,系统可能会认为您正在尝试“更改”您没有的属性并失败,因为它无法完成您(显然)要求的所有操作。</p>
<p>您应该检查 <code>-setAttributes:ofItemAtPath:error:</code> 方法的返回值,看看它是否失败。如果是这样,您需要检查它提供的错误对象以了解原因。</p>
<hr/>
<p>更新:顺便说一下,对于这些类型的文件操作,您始终可以下拉到 POSIX API。有时,Cocoa 并不是用于低级操作的最佳 API,更接近金属会更清晰。</p>
<pre><code>int result;
do
{
result = chown(, -1, 12345);
}
while (result != 0 && errno == EINTR);
if (result != 0)
/* handle error; examine errno to learn failure reason */;
</code></pre>
<p>(不过,在这种情况下,从您记录的错误来看,我确信 <code>errno</code> 将是 <code>EPERM</code> (1)。)</p></p>
<p style="font-size: 20px;">关于ios - 修改 NSFileManager 中文件的 NSFileGroupOwnerAccountID 属性未得到更新,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/23758122/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/23758122/
</a>
</p>
页:
[1]