想象一下一个大型 SAN,其中有十万个文件处于无组织的目录结构中。
文件将被移动到具有有序目录结构的新 SAN。一些文件在移动时将被重命名。此外,许多文件都有引用,例如 Excel 电子表格是相互链接的,移动后这些引用将会中断。
我们需要保存一个“源文件”和“目标文件”路径的映射,以防我们需要参考档案,例如修复损坏的链接。
我研究了一下市场上是否有这样的产品,但一无所获。因此我开始编写一个应用程序,允许用户将文件和记录拖放到 SQL dB 中:
我对这种方法不是 100% 确定。有人知道是否有更好的方法吗?Windows 中有什么东西吗?
我们原本想扫描新旧目录,然后以此方式绘制地图。但不幸的是,这种方法行不通,因为文件名可能会改变,而且移动文件的创建/修改日期等都是今天。
我们正在考虑在每个文件中设置一些唯一的标识符,但这个想法从未得到实施,因为您会将不同文件类型的唯一标识符存储在哪里呢?
可能是 AutoHotKey 脚本?
答案1
我为我的一个客户用 C# 构建了一个自动化部署系统。这个问题看起来很类似,只是规模不同。
ADS 中处理的事项:
- 从 SVN 自动检出。
- 遍历所有文件夹。
- 每个文件夹都可以被纳入或排除在外。
- 如果包含文件夹,则所有文件和子文件夹也将被包含。排除也是如此。
- 就像包含一样,每个文件夹都可以重新定位到部署文件夹中的新位置。
- 一切都是拖放操作(幸运的是,部署脚本不需要经常修改)。
- 最关键的部分是二进制文件比较,以便仅复制已修改的文件。<-- 这看起来对你来说也是最重要的事情。由于我只处理 C# 或 perl 代码文件等代码文件,因此这是一个简单的检查:
- 拿取左右两边的文件
- 删除所有空格。
- 一次比较一个字节的文件。
就您而言,除非文件非常大,否则您可以使用相同的方法。如果文件非常大(假设这些是数据文件),简单的页眉/页脚比较就可以了。
我们正在考虑在每个文件中设置一些唯一的标识符,但这个想法从未得到实施,因为您会将不同文件类型的唯一标识符存储在哪里呢?
这也是我开始使用的方法,但我的问题没有那么严重,所以我放弃了。从技术上讲,每个 FileInfo 对象都包装在一个专门的类中,该类具有 GUID 类型的特定字段。我将这个序列化类数组保存在 XML 文件中。
<FIItem>
<ID>*some guid*</ID>
<FileInfoObj>*file info which contains full file path*</FileInfoObj>
</FIItem>