0

我正在创建一个备份解决方案。我怀疑我想要实现的目标有什么新东西。

在复制文件之前,我想对目标文件进行备份,以防有任何损坏。这意味着重命名文件。

重命名时我必须小心,以防文件已经存在并且在末尾添加 01 是不安全的。

我的问题是,基于在其他地方找不到答案,将 GUID 添加到文件名工作。因此,如果我的文件名为 file01.txt,将文件重命名为 file01.txtGUID(其中 GUID 是生成的 GUID),然后我可以执行该文件的备份(在这种情况下有 2 个备份),然后,在确保文件已复制(通过将文件长度与源进行比较),删除名称中带有 GUID 的文件。

我知道 GUID 不能 100%保证是唯一的,但这是否足够?

4

4 回答 4

3

只需获取一个 GUID,然后询问目标操作系统是否存在名称+GUID。如果是,则选择一个新的 GUID 并重试。无论如何,您都将删除名称+GUID 文件,所以谁在乎您是否不能在第一次尝试时选择唯一的文件名。

考虑到风险和影响,我认为您可能专注于错误的问题。

如果您没有磁盘空间在目标系统上进行两次备份怎么办?

如果文件名 + 路径太长,目标操作系统无法处理怎么办?

在您获取名称和尝试对文件执行时间操作之间的时间段内,其他人修改了文件是什么?

编写防御性代码就是要考虑风险,但不要因为专注于不太可能或几乎不可能的场景而让自己发疯。

于 2012-10-13T15:46:43.930 回答
2

为什么不直接使用 GetTempFileName()?这就是它的用途;

http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx

于 2012-10-13T17:18:30.950 回答
1

是的,这就足够了。通过量子力学没有什么是不可能的,理论上在一百万年内你可能能够通过机会复制 GUID,但由于你还添加了文件的名称,所以它更不可能。您当然也可以添加以字节为单位的文件大小或文件的哈希值,但请记住,在 Windows 上,路径的长度不是无限的。

Guid.NewGuid()

如果你的朋友。

于 2012-10-13T15:39:46.290 回答
-1

它是全球独一无二的,在宇宙中是独一无二的。你引用的帖子是个笑话。

于 2012-10-13T15:36:14.237 回答