一个明显的解决方案是创建一个静态字典,其中包含用于文件的文件名和Guids。然后每当我们生成文件时,我们查找文件名的字典并使用相应的唯一标识符。但是,这并不可行,因为我们可能会扩展到数百个文件,并且不想维护大量的唯一标识符列表。
因此,另一种方法是根据文件路径使Guid保持一致。由于我们的文件路径和应用程序目录结构是唯一的,因此该Guid应对该路径唯一。因此,每次运行升级时,文件都基于其路径获取相同的guid。我发现了一种生成此类 'Deterministic Guids'(感谢Elton Stoneman)的酷炫方法。它基本上是这样做的:
private Guid GetDeterministicGuid(string input)
{
//use MD5 hash to get a 16-byte hash of the string:
MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
byte[] inputBytes = Encoding.Default.GetBytes(input);
byte[] hashBytes = provider.ComputeHash(inputBytes);
//generate a guid from the hash:
Guid hashGuid = new Guid(hashBytes);
return hashGuid;
}
所以,给定一个字符串,Guid 将始终相同。
还有其他方法或推荐的方式来做这件事吗?那种方法的优缺点是什么?