如何将大量小文件合并到一个文件中
How to merge a huge number of small files into one file
我有大约150万个小文件,总大小约80GB。
我想将这些文件合并成一个文件以便快速复制。我试图将它们存档到一个 zip 文件中,并使用以下代码读取文件:
ZipFile zip = ZipFile.Read(Settings.Default.DataPath);
ZipEntry entery = zip[MyFile];
想法可行,但速度太慢,加载一个文件大约需要 30 秒。
有没有其他更快的方法来合并文件?
谢谢
一种方法是使用 SQLite(您可以通过 Nuget 包添加它)并创建一个数据库文件来保存所有这些单独的数据位。
您将创建一个 table 来保存所有文件并将文件名作为主键,这将自动在其上创建索引:
CREATE TABLE files
(
filename TEXT NOT NULL PRIMARY KEY,
content BLOB
)
然后您可以将所有文件插入其中,每个文件一行。
要检索它,您可以像这样执行 SQL:
SELECT content FROM files WHERE filename = ?
我会将所有这些封装到一个新的 class 中,以便您将维护和使用该文件的功能与应用程序的其余部分分开。
我有大约150万个小文件,总大小约80GB。
我想将这些文件合并成一个文件以便快速复制。我试图将它们存档到一个 zip 文件中,并使用以下代码读取文件:
ZipFile zip = ZipFile.Read(Settings.Default.DataPath);
ZipEntry entery = zip[MyFile];
想法可行,但速度太慢,加载一个文件大约需要 30 秒。
有没有其他更快的方法来合并文件?
谢谢
一种方法是使用 SQLite(您可以通过 Nuget 包添加它)并创建一个数据库文件来保存所有这些单独的数据位。
您将创建一个 table 来保存所有文件并将文件名作为主键,这将自动在其上创建索引:
CREATE TABLE files
(
filename TEXT NOT NULL PRIMARY KEY,
content BLOB
)
然后您可以将所有文件插入其中,每个文件一行。
要检索它,您可以像这样执行 SQL:
SELECT content FROM files WHERE filename = ?
我会将所有这些封装到一个新的 class 中,以便您将维护和使用该文件的功能与应用程序的其余部分分开。