C#如何判斷檔案是否相同?
阿新 • • 發佈:2022-05-31
自己寫了一個整理音樂檔案的小工具。
載入檔案的時候,需要判斷是否為同一檔案。前面的做法是,每次載入檔案的時候都去檢測檔案的MD5。這種方式比較保險,但是造成的影響是載入的時候會比較慢,特別是檔案比較多的時候。
其實大部分的時候,這些都是同樣的檔案,而且也沒有變化。
所以想通過其它比較快捷的方式先判斷是否為同一檔案,然後再去判斷有無必要重新檢測MD5判斷。
目前的判斷邏輯是,如果檔案的完整路徑,檔案大小,建立時間,修改時間都一致,那就認為是同一個檔案。
個人認為這4種屬性都一模一樣,但是檔案又不相同的情況,概念會非常小。
下面是我用到的資料類:
using Prism.Mvvm; using CgdataBase;using FreeSql.DataAnnotations; using System.IO; using System; namespace MusicManager.Models { [Table(Name = "mm_file_md5")] public class FileMd5Info : BindableBase, IBaseInfo { [Column(IsIdentity = true, IsPrimary = true)] public int ID { get; set; } [Column(IsIgnore= true)] public string FileName { get; set; } [Column(IsIgnore = true)] public string FullPath { get; set; } [Column(IsIgnore = true)] public long Length { get; private set; } [Column] public DateTime CreationTime { get; private set; } [Column]public DateTime LastWriteTime { get; private set; } [Column(IsNullable = false)] public string MD5 { get; set; } public FileMd5Info() { } public FileMd5Info(string filePath) { var info = new FileInfo(filePath); FullPath = info.FullName; Length = info.Length; CreationTime = info.CreationTime; LastWriteTime = info.LastWriteTime; } public bool IsDifferent(FileMd5Info info) { return info.FullPath != FullPath || info.Length != Length || info.CreationTime != CreationTime || info.LastWriteTime != LastWriteTime; } } }