我正在创建一个备份解决方案。我怀疑在我想要实现的目标方面有什么新的东西。
在复制文件之前,我想备份目标文件,以防万一有任何损坏。这意味着重命名文件。
重新命名时我必须小心,以防文件已经存在,并且在末尾添加01是不安全的。
我的问题是,基于没有找到答案的地方,将在文件名工作中添加GUID。因此,如果我的文件名为file01.txt,则将文件重命名为file01.txtGUID(其中GUID是生成的GUID),然后我可以执行该文件的备份(在此实例中有2个备份)然后,确保文件已复制(通过比较文件的长度与源),删除名称中带有GUID的文件。
我知道GUID不是100%guaranteed to be unique,但这样就足够了吗?
答案 0 :(得分:3)
只需获取GUID,然后询问目标操作系统是否存在名称+ GUID。如果是,则选择一个新的GUID并再试一次。你打算删除名称+ GUID文件,所以谁在乎你是否在第一次尝试时不能选择一个唯一的文件名。
考虑到风险和影响,我认为你可能会关注错误的问题。
如果您没有磁盘空间在目标系统上进行两次备份,该怎么办?
如果文件名+路径太长而目标操作系统无法处理,该怎么办?
在获得名称并尝试对文件执行时间操作之间的某段时间内,其他人是修改文件的?
编写防御性代码是为了考虑风险,但不要因为你专注于不太可能或几乎不可能的情况而让自己发疯。
答案 1 :(得分:2)
为什么不直接使用GetTempFileName()?这就是它的用途;
http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx
答案 2 :(得分:1)
是的,这就足够了。通过量子力学没有什么是不可能的,理论上在一百万年里你可以通过偶然机会重现GUID,但是当你还要添加文件名时,所以它更加不可能。你当然也可以用byte或文件的哈希来添加文件大小,但是请记住,在Windows上,路径的长度不是无限的。
Guid.NewGuid()
如果你的朋友。
答案 3 :(得分:-1)
它是全球独一无二的,在宇宙中是独一无二的。你引用的帖子是一个笑话。