我将从通过 SHA 哈希查找相同的文件开始。您可以使用类似的方法来获取与新上传文件具有相同哈希值的文件列表,然后采取一些措施。
只是一个获取新文件哈希的例子:
string newfile;
using(FileStream fs = new FileStream( string newfile;
using(FileStream fs = new FileStream("C:\\Users\\Drive\\File\\Uploaded\\From\\newfile.txt", FileMode.Open))
{
using (System.Security.Cryptography.SHA1Managed sha1 = new System.Security.Cryptography.SHA1Managed())
{
newfile = BitConverter.ToString(sha1.ComputeHash(fs));
}
}
这会遍历所有文件并获取文件名和哈希列表
var allfiles = Directory.GetFiles(@"var allfiles = Directory.GetFiles(@"C:\Users\Drive\File\Uploaded\From\", "*.*")
.Select(
f => new
{
FileName = f,
FileHash = new System.Security.Cryptography.SHA1Managed()
.ComputeHash(new FileStream(f,
FileMode.Open,
FileAccess.Read))
})
.ToList();
foreach(var fi in allfiles){
if(newfile == BitConverter.ToString(fi.FileHash))
Console.WriteLine("Match!!!");
Console.WriteLine(fi.FileName + ' ' + BitConverter.ToString(fi.FileHash));
}
}", " . ") .Select( f => new { FileName = f, FileHash = new System.Security.Cryptography.SHA1Managed() .ComputeHash(new FileStream(f, FileMode.Open, FileAccess.Read)) })
.ToList();
这将遍历它们并寻找与新匹配的匹配项。
foreach(var fi in allfiles){
if(newfile == BitConverter.ToString(fi.FileHash))
Console.WriteLine("Match!!!");
Console.WriteLine(fi.FileName + ' ' + BitConverter.ToString(fi.FileHash));
}
理想情况下,您会在文件上传时保存此哈希,因为重新计算非常密集。