【发布时间】:2012-06-23 19:18:52
【问题描述】:
我正在尝试编写一个基本的同步程序来在两个目录之间复制文件。
计划是拥有某种已经复制的文件的数据库,这样当程序扫描目录时,它可以挑选出它已经复制的内容以及需要再次复制的内容,即修改过的文件或新文件。
我不知道如何解决的一个问题是我应该如何处理由用户重命名的文件。我怎么知道重命名的文件实际上与数据库中列出的文件相同,尽管名称不同。是否有程序可以提取的基础文件 ID?我希望代码是可移植的,因此考虑到文件系统会有所不同,这可能会使这变得更加困难。
我想我可以记下每个文件的大小和创建日期,并将这些信息保存在数据库中,以确定文件是否实际上只是重命名了。如果两个文件具有相同的信息大小/日期,我可以存储一个散列或其他东西来区分它们,但我不知道这样做的效率如何。
有什么建议吗? (我使用的是 C++/QT)
【问题讨论】:
-
您需要支持哪些平台/文件系统?大多数文件系统确实为每个文件都有一个唯一的 ID,但访问它不会是可移植的(尽管可以将不可移植的代码限制在一个相当小的特定部分)。顺便说一句,我不记得了,但 Boost Filesystem 可能也有办法解决这个问题。
-
真的只是 Windows/OSX。我会去 Boost 看看他们有没有什么东西。作为一个有趣的问题,你知道我如何访问 windows 文件 ID 吗?
-
在 Windows 上,您将在从
GetFileInformationByHandle获得的结构中使用nFileIndexLow/nFileIndexHigh。
标签: c++ file qt filesystems rename