我想要做的是扫描光盘或驱动器(usb,主硬盘等)以获取文件并将其信息存储在数据库中。然后我会将数据库搜索到特定文件以查找它的存储位置。或者,我可以搜索多少旧复制用于归档的原因或者如果我有一些东西,并且不需要重新归档它或寻找一个欺骗,我故意多次备份它,我的一个光盘是划痕或驱动器已损坏
这就是我的想法
os + fs标志(1个字节?) st_mode(即使不在 Linux 中)2bytes win32_attr(即使不在Windows上)4bytes(这包括hiddent,dir vs file,locked等) 文件大小(64位) a / m / c时间,64位。 索引/唯一键作为fileID
我应该在自己的表中将名称作为变量长度查找其匹配的fileID吗?或者我应该在数据库中有260长度的文件名,或者我应该在数据库中有一个可变长度的文件名?
然后我在我的校验和(md5,sha1,sha512等,每个一个blob)所需的XYZ位blob中查找由fileID查询的校验和/哈希表。
我在想我的哈希表应该有fileID(int与index的长度相同?),hashType(int),hashValue(varchar)。
答案 0 :(得分:0)
将文件名作为varchar放在文件表中,至少是varchar [1024],windows对某些操作系统组合中的总路径长度有限制,类似于ISO CD / DVD。
将哈希值放在关联表中,如:
Hash
{
fileId int,
hash_type int, -- or enum
hash varchar[ 255 ], -- or largest hashtype
PK ( fileId, hash_type ),
index( fileID ),
}
因此您可以稍后添加新的哈希类型,并允许您不支持所有文件的所有哈希类型。