文件比較 .NET:以程式方式接受與拒絕變更

如果你仍在手動比較文件並肉眼追蹤變更,就會浪費本可以用於實際開發的寶貴時間。自動化文件工作流程,使用強大的文件比較 .NET 解決方案,手動工作量可減少高達 90%。無論你是構建內容管理系統、處理法律文件審核,或管理協同編輯工作流程,程式化的文件比較不僅是加分項——它是任何嚴肅應用程式的必備功能。

快速回答

  • 什麼函式庫在 .NET 中處理變更追蹤? GroupDocs.Comparison for .NET.
  • 初始設定需要多長時間? 使用 NuGet 大約 5 分鐘。
  • 我可以同時比較 Word 和 PDF 檔案嗎? 可以——支援超過 50 種輸入與輸出格式。
  • 批次處理是否可行? 絕對可以;你可以在單一迴圈中處理數十個檔案。
  • 生產環境需要授權嗎? 需要——完整授權會移除試用限制並解鎖所有功能。

為何文件比較很重要(以及你可能做錯的原因)

如果你仍在手動比較文件並肉眼追蹤變更,就會浪費本可以用於實際開發的寶貴時間。事實是:document comparison .NET 解決方案可以自動化 90% 的文件工作流程痛點,我將向你完整展示如何做到。

無論你是構建內容管理系統、處理法律文件審核,或管理協同編輯工作流程,程式化的文件比較不僅是加分項——它是任何嚴肅應用程式的必備功能。

透過本教學,你將學會:

  • 在數分鐘內(而非數小時)設定文件比較 .NET 功能
  • 以程式方式精準接受與拒絕變更
  • 處理大多數開發者會卡住的實務情境
  • 在處理大型文件集合時優化效能
  • 在問題影響專案前先行排除常見問題

讓我們深入探討——從你需要的前置條件開始。

開始之前:必要前置條件

以下是你在跟隨教學(並在專案中實作)所需的項目:

  • .NET Framework 4.6.1 或更新版本 – 舊版無法使用
  • 基本的 C# 知識 – 你應該熟悉類別與方法
  • Visual Studio(或你偏好的 IDE)已安裝並就緒
  • 5 分鐘 以安裝 GroupDocs 套件

正確設定 GroupDocs.Comparison for .NET

大多數教學會略過此處的細節,但正確的設定能為你省去之後的除錯麻煩。以下是正確的做法:

安裝選項

選項 1:NuGet 套件管理員主控台(推薦)

Install-Package GroupDocs.Comparison -Version 25.4.0

選項 2:.NET CLI(如果你偏好命令列)

dotnet add package GroupDocs.Comparison --version 25.4.0

授權(請勿跳過此步驟)

許多開發者在此卡住。GroupDocs.Comparison 需要正確的授權才能在生產環境使用。你的選項有:

  1. 從免費試用開始 – 非常適合測試:Download here
  2. 取得臨時授權 – 用於延長評估:Request here
  3. 完整授權 – 用於正式部署:Purchase here

基本設定與初始化

GroupDocs.Comparison 是負責協調所有比較操作的核心類別。加入 NuGet 套件後,你只需建立實例並指向要比較的檔案。

using GroupDocs.Comparison;

設定完成。簡單吧?接下來讓我們進入有趣的部分——實際比較文件與管理變更。

完整實作指南

以下將實作示範。我會帶你完成一個真實情境的實作,你可以依需求自行調整。

了解接受/拒絕工作流程

在撰寫程式碼之前,先釐清我們要建構的流程。使用 GroupDocs 的 Document comparison .NET 如下運作:

  1. 比較 兩份文件以找出差異
  2. 分析 比較過程中發現的變更
  3. 決定 哪些變更要接受或拒絕
  4. 套用 你的決策以產生最終文件

此工作流程讓你對文件修訂擁有精準的控制——非常適合批准流程、協同編輯或自動化內容管理。

步驟式實作

步驟 1:設定檔案路徑(正確做法)

請確保使用絕對路徑或正確解析的相對路徑;否則會拋出 FileNotFoundException

string documentDirectory = "YOUR_DOCUMENT_DIRECTORY";
string outputDirectory = "YOUR_OUTPUT_DIRECTORY";

string sourceFilePath = Path.Combine(documentDirectory, "SOURCE_WORD");
string targetFilePath = Path.Combine(documentDirectory, "TARGET_WORD");
string acceptedChangesOutputFile = Path.Combine(outputDirectory, "RESULT_WITH_ACCEPTED_CHANGE_WORD");
string rejectedChangesOutputFile = Path.Combine(outputDirectory, "RESULT_WITH_REJECTED_CHANGE_WORD");

步驟 2:初始化 Comparison 並偵測變更

Comparison 物件會載入來源與目標檔案,執行差異引擎,並回傳描述每項修改的 ChangesInfo 集合。

ChangesInfo 是一個集合,包含每個偵測到的修改的詳細資訊,例如類型、位置與作者。

using (Comparer comparer = new Comparer(sourceFilePath))
{
    comparer.Add(targetFilePath);
    comparer.Compare();
    ChangeInfo[] changes = comparer.GetChanges();
}

步驟 3:如何以程式方式拒絕變更?

載入 ChangesInfo 集合,找到想要捨棄的變更,將其 Action 設為 ComparisonAction.Reject,然後儲存結果。

ComparisonAction 是一個列舉,指定變更是接受、拒絕或保持不變。

changes[0].ComparisonAction = ComparisonAction.Reject;
comparer.ApplyChanges(rejectedChangesOutputFile, new ApplyChangeOptions { Changes = changes, SaveOriginalState = true });

為什麼 SaveOriginalState = true 這會保留原始的格式與結構——在之後接受其他變更時,對維持文件完整性至關重要。

步驟 4:如何接受想要的變更?

選取想要的變更物件,將 Action 設為 ComparisonAction.Accept,然後呼叫 Save

changes[0].ComparisonAction = ComparisonAction.Accept;
comparer.ApplyChanges(acceptedChangesOutputFile, new ApplyChangeOptions { Changes = changes });

真實情境實作技巧

批次處理多個變更

// Accept all insertions, reject all deletions
foreach (var change in changes)
{
    if (change.Type == ChangeType.Inserted)
        change.ComparisonAction = ComparisonAction.Accept;
    else if (change.Type == ChangeType.Deleted)
        change.ComparisonAction = ComparisonAction.Reject;
}

條件式變更管理 – 例如,只接受特定作者或特定頁碼範圍內的變更。

// Only accept changes from specific authors
foreach (var change in changes)
{
    if (change.Authors.Contains("TrustedUser"))
        change.ComparisonAction = ComparisonAction.Accept;
    else
        change.ComparisonAction = ComparisonAction.Reject;
}

常見問題與解決方法

檔案路徑問題

症狀FileNotFoundException 或存取被拒錯誤
解決方案:務必確認檔案路徑存在且應用程式具備讀寫權限。

if (!File.Exists(sourceFilePath))
    throw new FileNotFoundException($"Source file not found: {sourceFilePath}");

大型文件的記憶體問題

症狀:處理大型檔案時拋出 OutOfMemoryException
解決方案:將文件分塊處理、啟用串流模式,或提升程序的記憶體上限。

// Configure comparison settings for large files
CompareOptions options = new CompareOptions()
{
    DetectStyleChanges = false, // Reduces memory usage
    GenerateSummaryPage = false
};

不支援的文件格式

症狀:「不支援的格式」例外
解決方案:在處理前確認格式相容性;GroupDocs.Comparison 支援 50+ 種格式,包括 DOCX、PDF、PPTX、XLSX 與純文字。

var supportedFormats = new[] { ".docx", ".doc", ".pdf", ".txt" };
string extension = Path.GetExtension(sourceFilePath).ToLower();
if (!supportedFormats.Contains(extension))
    throw new NotSupportedException($"Format {extension} not supported");

真實情境的實際應用案例

律師事務所使用此方法管理合約修訂。資深合夥人可依預先設定的業務規則,以程式方式接受特定條款變更,同時拒絕其他變更。

2. Content Management Systems

出版平台使用 document comparison .NET 處理編輯工作流程。作者提交修訂,編輯以程式方式審核變更,僅批准的內容才會上線。

3. Collaborative Software Development Documentation

技術寫作團隊使用此方式管理文件更新。來自可信貢獻者的變更會自動接受,其他則需人工審核。

4. Compliance and Audit Trails

組織透過程式化分析文件修改,建立詳細的變更日誌。此舉提供完整的稽核追蹤,以符合規範要求。

效能最佳化:提升速度

記憶體管理最佳實踐

// Always dispose properly
using (Comparer comparer = new Comparer(sourceFilePath))
{
    // Your comparison logic here
} // Automatically disposed here

批次處理策略

針對多個文件:

// Process in batches to avoid memory overload
const int batchSize = 10;
for (int i = 0; i < documents.Count; i += batchSize)
{
    var batch = documents.Skip(i).Take(batchSize);
    ProcessDocumentBatch(batch);
    GC.Collect(); // Force garbage collection between batches
}

設定調校

微調比較引擎,停用不必要的功能(例如中繼資料比較),以減少記憶體佔用。

CompareOptions options = new CompareOptions()
{
    DetectStyleChanges = false,        // Skip formatting changes for speed
    GenerateSummaryPage = false,       // Skip summary generation  
    CalculateCoordinates = false       // Skip position calculations
};

進階技巧(高階使用者)

自訂變更過濾

// Create custom filters for specific change types
var importantChanges = changes.Where(c => 
    c.Type == ChangeType.Inserted && 
    c.Text.Length > 10 &&
    !c.Text.Contains("temp")).ToArray();

自動化決策規則

// Implement business rules for automatic decisions
public ComparisonAction DecideOnChange(ChangeInfo change)
{
    if (change.Authors.Contains("Admin")) return ComparisonAction.Accept;
    if (change.Text.Contains("TODO")) return ComparisonAction.Reject;
    return ComparisonAction.None; // Manual review needed
}

總結:你的 Document Comparison .NET 工具箱

現在你已掌握在 .NET 應用程式中實作專業級文件比較所需的一切。重點如下:

  • GroupDocs.Comparison 承擔文件分析的繁重工作
  • 程式化的接受/拒絕 為你提供對變更的精確控制
  • 效能最佳化 對於正式環境的應用至關重要
  • 完善的錯誤處理 可避免支援惡夢

接下來怎麼做?

先使用自己的文件建立簡單的概念驗證。掌握基本工作流程後,可探索進階功能,如樣式比較、格式偵測與自訂變更類型。自動化文件工作流程 的真正威力在於打造可隨業務需求成長的可擴充流程。

常見問答

問:GroupDocs.Comparison 支援哪些文件格式?
:它支援 Word(.docx、.doc)、Excel(.xlsx、.xls)、PowerPoint(.pptx、.ppt)、PDF、純文字等多種格式——總計超過 50 種。詳情請參閱 full format list

問:我可以在 ASP.NET Core 應用程式中使用嗎?
:當然可以!GroupDocs.Comparison 可無縫搭配 ASP.NET Core、Web API 以及其他現代 .NET 框架。

問:如何處理超大型文件而不耗盡記憶體?
:使用上述的最佳化技巧:停用不必要的比較功能、批次處理檔案,並在每次執行後明確釋放 Comparison 物件。

問:有沒有辦法在套用前預覽變更?
:有!ChangesInfo 集合包含每項變更的詳細中繼資料,包括原始與修訂文字。你可以建立 UI,在提交前突顯這些差異。

問:Accept 與 Reject 動作有何差異?
Accept 會將變更納入最終文件(保留新版本)。Reject 會捨棄變更,保留原始內容。將 ComparisonAction.None 設為未標記狀態。

問:我可以將它與 Git 等版本控制系統整合嗎?
:雖然 GroupDocs.Comparison 未直接整合 Git,但你可以建立工作流程,比較不同分支的檔案、產生變更報告,並將接受的版本提交回儲存庫。

問:有什麼授權限制需要注意嗎?
:免費試用提供完整功能,但限制 30 天與 5 位同時使用者。正式部署需付費授權,價格依部署情境而異。

問:變更偵測的準確度如何?
:文字變更的偵測準確度超過 99%。樣式與格式偵測則取決於你選擇的設定;對於關鍵文件,你可以啟用細緻的樣式比較。

其他資源


最後更新: 2026-07-01
測試環境: GroupDocs.Comparison 23.10 for .NET
作者: GroupDocs

相關教學