如何提供大量文件作为应用程序的一部分

本文关键字:应用程序 一部分 文件 何提供 | 更新日期: 2023-09-27 17:50:32

所以,我的应用程序依赖于大量的小文件。实际数字大约在9万左右。现在,我使用一个需要访问这些文件的组件,但是它接受这些文件的唯一方法是使用URI。

到目前为止,我只是在开发应用程序时将包含所有文件的目录添加到调试文件夹中。但是,现在我必须考虑部署。在部署中包含所有这些文件时,我有哪些选项?

到目前为止,我已经想出了几个不同的解决方案,但没有一个我能完全奏效。首先是简单地将所有文件添加到安装程序中,然后将它们复制到相应的位置。这至少在理论上是可行的,但是它会使维护安装程序(一个用VS生成的标准msi安装程序)变成一个绝对的地狱。

我想到的下一个选项是将它们压缩成一个文件,并将其作为安装程序的一部分添加,然后通过使用自定义操作将它们解压缩。然而,标准库似乎不支持复杂的zip文件,这使得这成为一个相当困难的选择。

最后,我意识到我可以创建一个单独的项目,并将所有文件作为资源添加到该项目中。我不知道的是,指向存储在其他程序集中的资源的uri是如何工作的。意思是,支持"application://…:Assembly"格式的一切都是"标准"吗?

那么,这些是我唯一的选择,还是还有其他的选择?那么最好的选择是什么呢?

如何提供大量文件作为应用程序的一部分

我会使用一个类似zip的归档文件,并且将该文件解压缩到硬盘上,而是保持原样。这也是几个众所周知的依赖于大量小文件的应用程序所使用的方法。

Windows支持使用zip文件作为虚拟文件夹(如XP),用户可以使用Windows资源管理器等标准工具查看和编辑其内容。

c#对zip文件也有很好的支持,如果你对内置的工具不满意,我推荐一个主要的zip库——它们非常容易使用。

如果你担心性能,在内存中缓存文件是一个简单的练习。如果您的用例确实需要文件存在磁盘上,也不是问题,只需在第一次使用时解压缩它们-这只是几行代码。

总之,只要使用zip文件和一个好的库,你就不会遇到任何麻烦。

在任何情况下,我都不会直接在应用程序中嵌入这么多文件。数据文件要分开。

您可以将这些文件包含在zip存档中,并在首次启动时让应用程序自己解压缩它们,作为最终配置的一部分,如果从安装程序中这样做不实际的话。这并不是完全不典型的(例如,似乎大多数微软应用程序在第一次运行时都会进行安装后配置)。

根据资源的使用方式,你可以有一个服务从某种类型的存储中按需提供它们并缓存它们,而不是将它们转储到某个地方。这可能有意义,也可能没有意义,这取决于这些资源的用途,例如,如果它们是UI元素,第一次访问的延迟可能是不可接受的。

您甚至可以使用http从本地或非本地服务器提供它们,或者SQL服务器(如果已经使用),也可以缓存它们,这对于维护来说非常好,但可能不适合环境。

我不会为每个文件单独做任何涉及嵌入资源的事情,那将是地狱维护。

另一种选择是创建一个自解压zip/rar归档文件,并从安装程序中解压。

一种选择是将它们保存在复合存储器中,并直接在存储器中访问它们。我们网站上的文章描述了各种类型的存储及其优点/特点。