1. 程式人生 > 其它 >C#如何判斷檔案是否相同?

C#如何判斷檔案是否相同?

自己寫了一個整理音樂檔案的小工具。

載入檔案的時候,需要判斷是否為同一檔案。前面的做法是,每次載入檔案的時候都去檢測檔案的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; } } }