将文件夹移动到 Documents 目录

Posted

技术标签:

【中文标题】将文件夹移动到 Documents 目录【英文标题】:Move a folder to Documents directory 【发布时间】:2010-11-04 19:16:46 【问题描述】:

我正在开发的 iPhone 应用程序在应用程序目录中捆绑了 20MB 的图像,随着时间的推移,我需要将新图像写入文档目录。

理想情况下,我希望将初始文件夹移动到文档目录,复制该文件夹将意味着浪费 20mb 的用户磁盘空间。

如果我无法在文档目录中创建所需的结构并将初始图像保留在原处,但这意味着每次我想显示图像时都要检查两个位置。

有没有办法在构建图像路径时自动搜索应用程序包和文档目录?

【问题讨论】:

【参考方案1】:

回答您的第一个问题:您无法将任何内容移出应用程序包。对上述捆绑包的任何修改都会使签名无效,并且会使您的应用在除越狱的 ios 设备之外的所有设备上都无法运行。

现在,面对复制图像的挑战:要在主包中找到某些内容,您可以这样做:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"myImage"
                                                      ofType:@"png"];

不过,对于图像,您最好这样做:

UIImage *imageFromBundle = [UIImage imageNamed:@"MyImage.png"];

这将为您进行缓存,而直接加载图像则不会。

我不知道您为什么要将图像复制出来,但似乎您有一组初始图像可能会被替换,也可能不会被替换。然后,我建议不要从捆绑包中复制,而是先在 Documents 文件夹中查找图像,如果不存在,请将其从捆绑包中复制出来。这允许您替换图像,而无需从包中复制或修改包。

【讨论】:

我说我不想想复制图片。随着时间的推移,我需要将新图像写入文档目录,然后当我需要显示图像时,我会在两个地方寻找。 如果您真的不想在文件系统中查看两次,您可以使用NSUserDefaults 存储图像的路径。默认值是包路径。【参考方案2】:

AFAIK 捆绑包是只读的。因此,虽然您的“移动”想法是一个不错的想法,但我相当肯定 Apple 目前不允许这样做。

有没有办法自动 搜索应用程序包和 构建时的文档目录 图片路径?

我可以说我已经为图像做到了这一点,但你必须自己创造魔法。我写了一个类,我会用图像的名称作为参数来调用它。该类将首先在文档目录中查找,然后在捆绑包中查找,最后在网站中查找图像。当它找到图像时,它返回 UIImage。最初设置有点痛苦,但一旦安装到位,它就非常有用,我很高兴我做到了。

【讨论】:

是的,我也在考虑类似的事情。

以上是关于将文件夹移动到 Documents 目录的主要内容,如果未能解决你的问题,请参考以下文章

没有使用 NSFileManager 移动文件

使用 os.walk() 将目录中的所有 .txt 文件移动到新文件夹?

无法将文件从包复制到 Documents 目录,为啥 fileExistsAtPath 返回错误?

如何将 SQLite 文件从 Documents 目录保存回目标 C 中的主包?

无法写入 plist 文件

防止篡改 iOS 上 Documents 目录中的文件