我可以将文件的绝对路径保存在数据库中吗?

Posted

技术标签:

【中文标题】我可以将文件的绝对路径保存在数据库中吗?【英文标题】:Can I save the keep the absolute path of a file in database? 【发布时间】:2015-07-07 08:09:20 【问题描述】:

在我的应用程序中,我将一些照片保存在沙盒中,并将其绝对路径保存在数据库中。然后我再次构建并运行,我获取路径并尝试获取照片,它说文件不存在。

最后我发现每次构建和运行我的应用,应用的路径都不一样。

我使用NSTemporaryDirectory()获取临时路径,我运行了两次,得到了两个结果。

/private/var/mobile/Applications/80E09BB5-5FEB-4C27-935E-E29DE7861392/tmp/ /private/var/mobile/Applications/71427100-0DBF-42F0-B6B4-F88F6417292E/tmp/

正常吗?当用户更新我的应用时,绝对路径会改变吗?

如果正常,我应该只保留数据库中的相对路径吗?有什么最佳做法吗?

【问题讨论】:

是的,这很正常。您看到更改的字符是由于“独特”以及与您的应用程序(我认为带有捆绑 ID)和编译日期的混合。你必须克服这个问题,例如使用NSTemporaryDirectory()(或其他类似的方法),这将使你已经获得“tmp”。 @Larme 当用户更新它的应用程序时,绝对路径会改变吗? 【参考方案1】:

将绝对路径存储在数据库中是一个非常糟糕的主意,因为对应用程序的任何更新都会导致应用程序存储在 /private/var/mobile/Applications 内的不同文件夹中。在应用更新期间,所有文件都将被迁移,但是在数据库中对它们的任何引用都将不再有效。

因此,您必须始终将文件路径 relative 存储到某个其他 逻辑 目录;例如 DocumentsCaches 文件夹。

这可能意味着您也应该将此路径存储为类中的相对目录,并且仅在需要使用时才解析为绝对路径。

最后存储临时文件引用可能是个坏主意,因为我相信任何临时或缓存的文件都可以随时被操作系统从文件系统中删除。因此,您应该使用我上面提到的技术将这些文件存储在 Documents 文件夹中。

【讨论】:

谢谢。苹果的文档中是否有关于更改应用程序绝对路径的参考? 应用更新期间保存的文件部分提到了here。 好像没说app绝对路径的变化。 它声明“iTunes 将更新安装在新的应用程序目录中”。 一点也不微妙。文档中没有暗示绝对路径将保持不变;相反,有很多提示告诉您始终使用具有适当目录的相对路径。 Apple 非常清楚将您的数据存储在哪里以及如何到达这些位置。【参考方案2】:

您可以将文件保存在服务器上并将其物理路径存储在数据库中。我过去曾构建过类似的应用程序,这就是我使用它的方式。可能不是正确的方法,只是一个想法。

【讨论】:

【参考方案3】:

正常吗?

那么,临时是什么意思?

当用户更新我的应用时,绝对路径会改变吗?

那么,临时是什么意思?

如果正常,我应该只保留数据库中的相对路径吗?

用它做什么?

有什么最佳做法吗?

不要使用临时路径进行持久存储。文档文件夹呢?

【讨论】:

不是临时目录的问题,documents文件夹的绝对路径也会改变。 可以,但是目录本身并没有改变。

以上是关于我可以将文件的绝对路径保存在数据库中吗?的主要内容,如果未能解决你的问题,请参考以下文章

绝对路径与相对路径

gradle 设置密钥库文件的绝对路径值

python关于文件保存的绝对路径

如何将arcgis的mxd文档存储为相对路径

关于相对路径和绝对路径

怎样让KindEditor上传图片使用绝对路径