gpt4 book ai didi

c# - 在 C# 中,根据路径查找唯一的文件 ID

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:00 28 4
gpt4 key购买 nike

我需要一种方法来确定用户是否已将文件复制到新位置。

示例:您有两台计算机,您将 file.txt 从计算机 1 上的 C:\Temp\复制到计算机 2 上的 C:\Temp\。

是否有与这两个文件关联的 ID(基于它们的位置)可以帮助我确定该文件是否已移动?

更新:经过一些讨论,这里是结果代码。这确定是否已通过使用文件路径和创建时间创建 Guid 来复制文件。可以将生成的 Guid 与存储的 Guid 进行比较,以确定文件是否已被复制。

FileInfo fi = new FileInfo("C:\\Temp\\temp.txt"); 
string filePathCreationComposite = String.Format("{0}{1}", Path.GetFullPath(fi.FullName), fi.CreationTime);

using (MD5 md5 = MD5.Create())
{
byte[] hash = md5.ComputeHash(Encoding.Default.GetBytes(filePathCreationCo‌​mposite));
Guid result = new Guid(hash);
}

最佳答案

如果您无法控制文件复制的过程(即 100% 知道用户在您的控制下执行此操作,例如在您的 UI 中),唯一可能的检查方法是比较内容。据我所知,没有特别值得信赖的文件 ID,尤其是在各种机器上,甚至保持相同以便您可以比较它。

这当然不能保证用户将文件从 A 复制到 B,因为内容完全相同的文件可以从其他任何地方复制,但我认为你真的只需要验证两个不同的位置是相同的。

比较文件内容(并存储其“id”)的一种简单方法是计算哈希值。 SHA-256 非常适合该目的。

这是这样做的例子:

string Hash(string file)
{
using (FileStream stream = File.OpenRead(file))
{
SHA256Managed sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}

虽然你当然不需要字符串。这不是一种非常有效的方法,您可以阅读更多相关信息 herehere .在第一个问题中,他们建议出于某种原因 SHA-512 计算速度更快,不知道这是不是真的。

附言值得注意的是,如果原始文件中有最简单的更改,哈希将不再匹配。

附言您可以使用任何更快的散列,例如 MD5 或其他一些散列(MD5 不是加密安全的,但这对您的情况无关紧要)。

关于c# - 在 C# 中,根据路径查找唯一的文件 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40308587/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com