菜鸟教程小白 发表于 2022-12-12 22:17:54

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&lt;;i++)
    {
      NSString *filePath = ;
      NSString *fullPath = ];
      attribs = [filemgr attributesOfItemAtPath:
                   docsDir error: NULL];
      NSLog (@&#34;POSIX Permissions %@&#34;, );
      NSMutableDictionary *attributes = ;
      
                      forKey:NSFilePosixPermissions]; // chmod permissions 777
      [setAttributes:attributes ofItemAtPath:docsDir error:&amp;error];
      NSLog(@&#34;updated: %@&#34;,[filemgr attributesOfItemAtPath:
                   docsDir error: NULL]);
      NSDictionary *dict2 = [filemgr attributesOfItemAtPath:
                                          docsDir error: NULL];
      NSMutableDictionary *attributes2 = ;
      forKey:NSFileGroupOwnerAccountID];
      [setAttributes:attributes2 ofItemAtPath:docsDir error:&amp;error];
      NSLog(@&#34;updated2: %@&#34;,[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:&amp;error];
</code></pre>

<p>还是报错:</p>

<pre><code>Error Domain=NSCocoaErrorDomain Code=513 &#34;The operation couldn’t be completed. (Cocoa error 513.)&#34; UserInfo=0x8d0b900 {NSFilePath=/Users/a/Library/Application Support/iPhone Simulator/7.1/Applications/81ADKJ1A2-B612-4784-9524-05456F323212/Documents, NSUnderlyingError=0x8d11b80 &#34;The operation couldn’t be completed. Operation not permitted&#34;}
</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 &amp;&amp; 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]
查看完整版本: ios - 修改 NSFileManager 中文件的 NSFileGroupOwnerAccountID 属性未得到更新