菜鸟教程小白 发表于 2022-12-13 12:00:01

ios - NSFileManager:无法在某些设备上创建目录


                                            <p><p>我想下载一个 zip 文件并使用此代码段移动下载的文件:</p>

<pre><code>NSFileManager *fileManager = ;
BOOL isDir;
NSString *path = ...;
NSString *targetPath = ...;

NSString *targetDirectory = ;
if (! &amp;&amp; !isDir)
{
   NSError *dirError;
   if (! )
   {
          NSLog(@&#34;%@&#34;, dirError.localizedDescription);
   }
}


//...



if ()
{
   success = YES;
}
</code></pre>

<p>它在我们的测试设备上运行良好,在 iOS 8.x 上也运行良好。现在,一些 beta 测试人员报告说,在 iOS 9.x 设备上移动 zip 文件失败,因为目标目录不存在。不是一般情况下,仅在少数运行 iOS 9.x 的设备上。我已将我们的测试设备更新到 iOS 9.1,它仍然可以工作。所有测试用户的 zip 文件都相同。</p>

<p>路径不是硬编码的,而是在代码片段之前生成的。 zip 文件总是从临时根目录复制到子路径/map/maps/deu/deu_1.0.zip ,例如</p>

<pre><code>path = @&#34;/private/var/mobile/Containers/Data/Application/0EAF2FEE-4E9F-4826-94AE-7D31D2B4D8E7/tmp/deu_1.0.zip&#34;;
targetPath = @&#34;/var/mobile/Containers/Data/Application/0EAF2FEE-4E9F-4826-94AE-7D31D2B4D8E7/Documents/map/maps/deu/deu_1.0.zip&#34;;
targetDirectory = @&#34;/var/mobile/Containers/Data/Application/0EAF2FEE-4E9F-4826-94AE-7D31D2B4D8E7/Documents/map/maps/deu&#34;;
</code></pre>

<p>路径总是通过读取临时目录的根路径生成。文件目录和附加文件名(deu_1.0.zip)resp。子路径(/map/maps/deu/deu_1.0.zip):</p>

<p>来自辅助类 MCPath:</p>

<pre><code>+ (NSString *)directoryDocuments
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *directory = ;
    return directory;
}
+ (NSString *)directoryTemporaryFiles
{
    return NSTemporaryDirectory();
}
</code></pre>

<p>这是生成路径的片段(从 URL 读取的文件名,但始终是相同的 URL,子路径存储在 mapInfo 对象中):</p>

<pre><code>NSString *path = [ stringByAppendingPathComponent:];
NSString *targetPath = [ stringByAppendingPathComponent:];
</code></pre>

<p>但无论如何,顶部的代码片段会检查目标目录是否存在。如果没有,则创建目标目录。最后,应该将 zip 文件从临时目录移动到目标目录。这就是目的,它在我们的测试设备上也能正常工作。但并非在所有设备上,尤其是在运行 iOS 9.x 的设备上。有人知道为什么吗?有人知道 iOS 9.x 在创建目录或移动文件时是否存在已知错误吗?</p>

<p>非常感谢您的回复。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我不认为这是正确的:</p>

<pre><code>if (! &amp;&amp; !isDir)
</code></pre>

<p>关于 <code>isDirectory</code> 的文档说明了这一点:如果路径不存在,则返回时该值未定义。</p>

<p>因此 <code>&& !isDir</code> 肯定是错误的。</p>

<p>你想要:</p>

<pre><code>if (!) {
    // Create directory
} else if (!isDir) {
    // Report error: plain file using that name and cannot continue
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - NSFileManager:无法在某些设备上创建目录,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33939686/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33939686/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - NSFileManager:无法在某些设备上创建目录