所以,我的应用程序依赖于大量的小文件。实际数字约为 90,000。现在,我使用需要访问这些文件的组件,但它接受它们的唯一方法是使用 URI。
到目前为止,我在开发应用程序时只是将包含所有文件的目录添加到我的调试文件夹中。但是,现在我必须考虑部署。在我的部署中包含所有这些文件时,我有哪些选择?
到目前为止,我提出了几个不同的解决方案,但没有一个能够完全奏效。首先是简单地将所有文件添加到安装程序,然后安装程序将它们复制到它们的位置。至少在理论上,这会起作用,但它会使维护安装程序(使用 VS 生成的标准 MSI 安装程序)变得非常糟糕。
我想到的下一个选项是将它们压缩到一个文件中并将其添加为安装程序的一部分,然后使用自定义操作将它们解压缩。然而,标准库似乎不支持复杂的 zip 文件,这使它成为一个相当困难的选择。
最后,我意识到我可以创建一个单独的项目并将所有文件作为资源添加到该项目中。我不知道指向存储在其他程序集中的资源的 URI 是如何工作的。意思是,支持“application://,,,:Assembly”格式的所有东西都是“标准”吗?
那么,这些是我仅有的选择吗,还是还有其他一些选择?解决这个问题的最佳选择是什么?
最佳答案
我会使用一个类似 zip 的存档文件,并且不将该文件解压缩到您的硬盘上,但保持原样。这也是一些依赖于大量较小文件的知名应用程序所使用的方法。
Windows 支持将 zip 文件用作虚拟文件夹(从 XP 开始),用户可以使用 Windows 资源管理器等标准工具查看和编辑其内容。
C# 还对 zip 文件提供了出色的支持,如果您对内置工具不满意,我推荐其中一个主要的 Zip 库 - 它们非常易于使用。
如果您担心性能,在内存中缓存文件是一个简单的练习。如果您的用例实际上需要文件存在于磁盘上,这也不是问题,只需在首次使用时解压缩它们 - 这只是几行代码。
简而言之,只需使用一个 zip 存档和一个好的库,您就不会遇到任何麻烦。
无论如何,我不会将如此庞大的文件直接嵌入到您的应用程序中。数据文件要分开。
关于c# - 如何在应用程序中提供大量文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703710/