belge karşılaştırma .net – Tam GroupDocs Uygulama Kılavuzu

Eğer compare documents .net yapmanız gerekiyorsa, doğru yerdesiniz. Aynı görünümlü iki sözleşmeyi açtığınızı ve her değişikliği anında fark ettiğinizi hayal edin—manuel kaydırma yok, kaçırılan düzenleme yok. Bu, otomatik belge karşılaştırmasının gücüdür ve GroupDocs.Comparison for .NET ile bunu dakikalar içinde gerçekleştirebilirsiniz.

Hızlı Yanıtlar

  • .NET’te belge karşılaştırmasını hangi kütüphane yönetir? GroupDocs.Comparison.
  • Word, Excel ve PDF dosyalarını karşılaştırabilir miyim? Evet—50’den fazla format desteklenir.
  • Hangi sürümü kullanmalıyım? Version 25.4.0 en iyi performans ve kararlılığı sunar.
  • Üretim için lisansa ihtiyacım var mı? Üretim dağıtımları için ticari bir lisans gereklidir.
  • Asenkron işleme mümkün mü? Kesinlikle—karşılaştırma API’siyle Task.Run kullanın.

GroupDocs.Comparison Nedir?

GroupDocs.Comparison, iki veya daha fazla belge arasındaki farkları programlı olarak tespit eden ve vurgulanmış bir sonuç dosyası oluşturan bir .NET kütüphanesidir. 50’den fazla formatı destekler, çok sayfalı dosyaları tüm içeriği belleğe yüklemeden işler ve karşılaştırma ayarları üzerinde ayrıntılı kontrol sağlar.

compare documents .net için GroupDocs.Comparison Neden Kullanılmalı?

GroupDocs.Comparison, .NET uygulamaları için hızlı, doğru ve ölçeklenebilir belge farkı (diff) sağlar. Büyük PDF ve Office dosyalarını saniyeler içinde işleyebilir, biçimlendirmeyi ve görsel bütünlüğü korurken eklemeleri, silmeleri ve stil değişikliklerini vurgular. Kütüphane, .NET Core, .NET 5/6/7 ve tam .NET Framework üzerinde çalışır, bu da onu her proje için çok yönlü bir seçim yapar.

  • Hız: Standart bir sunucuda 200 sayfalık PDF’i 2 saniyeden kısa sürede işler.
  • Doğruluk: Metin, biçimlendirme, tablolar ve görüntüleri %99,9 doğrulukla tespit eder.
  • Ölçeklenebilirlik: Akış (streaming) API’lerini kullanarak binlerce dosyadan oluşan toplu işleri yönetir.
  • Esneklik: .NET Core 3.1+, .NET 5/6/7 ve .NET Framework 4.6.1+ ile çalışır.

Önkoşullar

  • Geliştirme Ortamı: .NET Core 3.1 veya daha yeni, ya da .NET Framework 4.6.1 +
  • GroupDocs.Comparison Kütüphanesi: Version 25.4.0 (NuGet üzerinden kurulur)
  • Örnek Dosyalar: Test için Word, PDF veya Excel belgeleri
  • Temel C# Bilgisi: Sınıflar, metodlar, using ifadeleri

Olması Faydalı (Opsiyonel)

  • NuGet paket yönetimi hakkında bilgi
  • Dosya G/Ç ve akış (stream) deneyimi
  • async/await desenlerini anlama

GroupDocs.Comparison ile compare documents .net Nasıl Yapılır?

GroupDocs.Comparison ile iki belgeyi karşılaştırmak için, her dosyayı bir akışa yükleyin, isteğe bağlı ComparisonSettings’i yapılandırın ve bir Comparer örneği üzerinde Compare metodunu çağırın. API, farkları vurgulayan bir sonuç belgesi döndürür ve bunu desteklenen herhangi bir formatta kaydedebilirsiniz. Bu yaklaşım, karşılaştırma süreci üzerinde tam kontrol sağlarken sadece birkaç satır kod gerektirir.

Adım‑adım Uygulama

1️⃣ Akıllı Belge Yolu Yönetimi

Dosya yollarını merkezileştirmek, “dosya bulunamadı” hatalarını önler ve ortam geçişlerini sorunsuz hâle getirir.

public static class Constants
{
    public const string SOURCE_WORD = @"YOUR_DOCUMENT_DIRECTORY\source.docx";
    public const string TARGET_WORD = @"YOUR_DOCUMENT_DIRECTORY\target.docx";

    public static string GetOutputDirectoryPath()
    {
        return @"YOUR_OUTPUT_DIRECTORY";
    }

    public const string RESULT_WORD = "result.docx";
}

Neden bu çalışır:

  • Geliştirme, test veya üretim için yolları güncellemenin tek bir yeri.
  • Kod tabanında dağılmış sabit kodlu (hard‑coded) dizeleri ortadan kaldırır.

2️⃣ Temel Karşılaştırma Mantığı

Comparer sınıfı, diff algoritmasını yönlendiren motorudur.

using (Comparer comparer = new Comparer(Constants.SOURCE_WORD))
{
    // Add the target document for comparison
    comparer.Add(Constants.TARGET_WORD);

    // Perform the comparison and save the result
    string outputFileName = Path.Combine(Constants.GetOutputDirectoryPath(), Constants.RESULT_WORD);
    comparer.Compare(outputFileName);
}

Tanım bağlantısı:
Comparer, GroupDocs.Comparison’ın belge analizini yöneten ve vurgulanmış sonucu üreten temel sınıfıdır.

Nasıl yardımcı olur:

  • Add() çağrılarını tekrarlayarak birden fazla hedef belgeyi destekler.
  • Değişiklikleri kırmızı, yeşil veya özel renklerde vurgulayan bir sonuç dosyası oluşturur.

3️⃣ Excel ve PDF için Gelişmiş Ayarlar

Karşılaştırmayı biçimlendirmeyi yok sayacak veya veri değişikliklerine odaklanacak şekilde ince ayar yapabilirsiniz—compare excel files c# senaryoları için mükemmeldir.

CompareOptions compareOptions = new CompareOptions()
{
    ShowDeletedContent = true,
    ShowInsertedContent = true,
    StyleChangeDetection = true
};

using (Comparer comparer = new Comparer(sourcePath))
{
    comparer.Add(targetPath);
    comparer.Compare(outputPath, compareOptions);
}

Tanım bağlantısı:
ComparisonSettings, DetectStyleChanges veya DetectTableChanges gibi belirli değişiklik türlerini etkinleştirmenize veya devre dışı bırakmanıza olanak tanır.

4️⃣ Çoklu Formatların İşlenmesi

GroupDocs.Comparison dosya tipini otomatik olarak algılar, ancak gerektiğinde bir formatı zorlayabilirsiniz—compare pdf files c# için idealdir.

public static void CompareDocumentsByType(string sourcePath, string targetPath, string outputPath)
{
    string extension = Path.GetExtension(sourcePath).ToLower();
    
    using (Comparer comparer = new Comparer(sourcePath))
    {
        comparer.Add(targetPath);
        
        CompareOptions options = GetOptionsForFormat(extension);
        comparer.Compare(outputPath, options);
    }
}

private static CompareOptions GetOptionsForFormat(string extension)
{
    switch (extension)
    {
        case ".pdf":
            return new CompareOptions { DetectStyleChanges = false };
        case ".xlsx":
            return new CompareOptions { CalculateCoordinates = true };
        default:
            return new CompareOptions();
    }
}

5️⃣ Büyük Dosyaları Akışla İşleme

Devasa belgeleri işlerken, akış (streaming) tüm dosyayı belleğe yüklemeyi önler.

// For files over 50MB, consider this approach
using (var sourceStream = File.OpenRead(sourcePath))
using (var targetStream = File.OpenRead(targetPath))
using (var comparer = new Comparer(sourceStream))
{
    comparer.Add(targetStream);
    comparer.Compare(outputStream);
}

6️⃣ Sağlam Hata Yönetimi

Bozuk bir dosyanın hizmetinizi çökertmesine izin vermeyin; çağrıları try‑catch bloklarıyla sarın ve faydalı detayları kaydedin.

try
{
    using (Comparer comparer = new Comparer(sourcePath))
    {
        comparer.Add(targetPath);
        comparer.Compare(outputPath);
    }
}
catch (FileNotFoundException ex)
{
    Console.WriteLine($"Document not found: {ex.FileName}");
}
catch (UnauthorizedAccessException ex)
{
    Console.WriteLine($"Access denied: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Comparison failed: {ex.Message}");
}

Belge karşılaştırma en iyi uygulamaları

  • Girdi dosyalarını doğrulayın API’yi çağırmadan önce, desteklenmeyen formatları erken yakalamak için.
  • Path.Combine kullanın çapraz platform yol oluşturma için (bkz. Tuzak #1).
  • Sadece gerekli değişiklik türlerini etkinleştirin performansı artırmak için (ör. veri odaklı Excel sayfalarında stil algılamayı devre dışı bırakın).
  • Comparer nesnelerini hızlıca dispose edin, yerel kaynakları serbest bırakmak için.

Yaygın Tuzaklar ve Nasıl Kaçınılır

Tuzak #1: Yol Ayırıcı Sorunları

Çözüm: Her zaman yolları Path.Combine() ve Path.DirectorySeparatorChar ile oluşturun.

// Wrong - will break on different operating systems
string path = "C:/Documents/source.docx";

// Right - works everywhere
string path = Path.Combine("C:", "Documents", "source.docx");

Tuzak #2: Büyük Dosyalarda Bellek Tükenmesi

Çözüm: 50 MB’den büyük dosyalar için akış (streaming) moduna geçin.

// For files over 50MB, consider this approach
using (var sourceStream = File.OpenRead(sourcePath))
using (var targetStream = File.OpenRead(targetPath))
using (var comparer = new Comparer(sourceStream))
{
    comparer.Add(targetStream);
    comparer.Compare(outputStream);
}

Tuzak #3: İstisnaları Görmezden Gelmek

Çözüm: Kapsamlı try‑catch blokları uygulayın ve yığın izlerini (stack traces) kaydedin.

try
{
    using (Comparer comparer = new Comparer(sourcePath))
    {
        comparer.Add(targetPath);
        comparer.Compare(outputPath);
    }
}
catch (FileNotFoundException ex)
{
    Console.WriteLine($"Document not found: {ex.FileName}");
}
catch (UnauthorizedAccessException ex)
{
    Console.WriteLine($"Access denied: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Comparison failed: {ex.Message}");
}

Performans Optimizasyon Stratejileri

Bellek Yönetimi

Mümkün olduğunda Comparer örneklerini yeniden kullanın ve her karşılaştırmadan sonra Dispose() çağırın.

// Always dispose of resources properly
using (var comparer = new Comparer(sourcePath))
{
    comparer.Add(targetPath);
    comparer.Compare(outputPath);
    
    // Comparer is automatically disposed here
}

// For batch processing, clear resources between comparisons
for (int i = 0; i < documentPairs.Count; i++)
{
    using (var comparer = new Comparer(documentPairs[i].Source))
    {
        comparer.Add(documentPairs[i].Target);
        comparer.Compare(documentPairs[i].Output);
    }
    
    // Force garbage collection every 10 documents if needed
    if (i % 10 == 0)
    {
        GC.Collect();
        GC.WaitForPendingFinalizers();
    }
}

Asenkron İşleme

Kullanıcı arayüzünün yanıt vermesini sağlamak için karşılaştırmaları arka plan iş parçacıklarında çalıştırın.

public async Task<bool> CompareDocumentsAsync(string sourcePath, string targetPath, string outputPath)
{
    return await Task.Run(() =>
    {
        try
        {
            using (var comparer = new Comparer(sourcePath))
            {
                comparer.Add(targetPath);
                comparer.Compare(outputPath);
                return true;
            }
        }
        catch
        {
            return false;
        }
    });
}

Popüler .NET Çerçeveleriyle Entegrasyon

ASP.NET Core Web API Entegrasyonu

İki dosyayı kabul eden ve diff sonucunu dönen bir REST uç noktası (endpoint) sunun.

[ApiController]
[Route("api/[controller]")]
public class DocumentComparisonController : ControllerBase
{
    [HttpPost("compare")]
    public async Task<IActionResult> CompareDocuments([FromForm] IFormFile sourceFile, [FromForm] IFormFile targetFile)
    {
        if (sourceFile == null || targetFile == null)
            return BadRequest("Both source and target files are required.");

        var tempFolder = Path.GetTempPath();
        var sourcePath = Path.Combine(tempFolder, sourceFile.FileName);
        var targetPath = Path.Combine(tempFolder, targetFile.FileName);
        var outputPath = Path.Combine(tempFolder, $"comparison_{Guid.NewGuid()}.pdf");

        try
        {
            // Save uploaded files
            using (var stream = new FileStream(sourcePath, FileMode.Create))
                await sourceFile.CopyToAsync(stream);
            
            using (var stream = new FileStream(targetPath, FileMode.Create))
                await targetFile.CopyToAsync(stream);

            // Perform comparison
            using (var comparer = new Comparer(sourcePath))
            {
                comparer.Add(targetPath);
                comparer.Compare(outputPath);
            }

            // Return the result file
            var fileBytes = await System.IO.File.ReadAllBytesAsync(outputPath);
            return File(fileBytes, "application/pdf", "comparison_result.pdf");
        }
        finally
        {
            // Clean up temp files
            File.Delete(sourcePath);
            File.Delete(targetPath);
            File.Delete(outputPath);
        }
    }
}

Blazor Bileşen Entegrasyonu

Tarayıcıda yan yana karşılaştırma gösteren yeniden kullanılabilir bir bileşen oluşturun.

@using GroupDocs.Comparison
@inject IJSRuntime JSRuntime

<div class="document-comparison">
    <InputFile OnChange="HandleFileSelection" multiple />
    <button @onclick="CompareDocuments" disabled="@(!CanCompare)">Compare Documents</button>
    
    @if (comparisonResult != null)
    {
        <div class="result">
            <a href="@comparisonResult" download="comparison_result.pdf">Download Result</a>
        </div>
    }
</div>

@code {
    private List<IBrowserFile> selectedFiles = new();
    private string comparisonResult;
    
    private bool CanCompare => selectedFiles.Count == 2;

    private async Task HandleFileSelection(InputFileChangeEventArgs e)
    {
        selectedFiles = e.GetMultipleFiles(2).ToList();
    }

    private async Task CompareDocuments()
    {
        if (selectedFiles.Count != 2) return;

        // Implementation similar to Web API example
        // Save files, compare, and generate result
    }
}

Gerçek Dünya Kullanım Senaryoları

Senaryo 1: Hukuki Sözleşme İncelemesi

Hukuk firmaları, sözleşme revizyonları boyunca eklemeleri, silmeleri ve biçimlendirme değişikliklerini otomatik olarak vurgulayabilir.

public class ContractReviewService
{
    public ContractComparisonResult ReviewContract(string originalContract, string revisedContract)
    {
        var outputPath = Path.Combine(Path.GetTempPath(), $"contract_review_{DateTime.Now:yyyyMMddHHmmss}.docx");
        
        var compareOptions = new CompareOptions
        {
            ShowDeletedContent = true,
            ShowInsertedContent = true,
            StyleChangeDetection = true,
            WordsSeparatorChars = new[] { ' ', '.', ',', '!', '?' }
        };

        using (var comparer = new Comparer(originalContract))
        {
            comparer.Add(revisedContract);
            comparer.Compare(outputPath, compareOptions);
        }

        return new ContractComparisonResult
        {
            OutputPath = outputPath,
            HasChanges = File.Exists(outputPath),
            ComparisonDate = DateTime.Now
        };
    }
}

Senaryo 2: Elektronik Tablo Versiyon Kontrolü

Finans ekipleri, her dosyayı manuel olarak açmadan Excel modellerindeki değişiklikleri tespit edebilir.

public class DocumentVersionControl
{
    public void TrackDocumentChanges(string documentPath, string repositoryPath)
    {
        var versions = Directory.GetFiles(repositoryPath, "*.docx").OrderBy(f => f);
        var latestVersion = versions.LastOrDefault();

        if (latestVersion != null)
        {
            var comparisonPath = Path.Combine(repositoryPath, $"changes_{DateTime.Now:yyyyMMdd}.docx");
            
            using (var comparer = new Comparer(latestVersion))
            {
                comparer.Add(documentPath);
                comparer.Compare(comparisonPath);
            }

            // Archive the comparison for future reference
            ArchiveComparison(comparisonPath);
        }
    }

    private void ArchiveComparison(string comparisonPath)
    {
        // Implementation for archiving comparison results
        var archivePath = Path.Combine(Path.GetDirectoryName(comparisonPath), "archive", Path.GetFileName(comparisonPath));
        Directory.CreateDirectory(Path.GetDirectoryName(archivePath));
        File.Move(comparisonPath, archivePath);
    }
}

Sorun Giderme Kılavuzu

Sorun 1: “Dosya formatı desteklenmiyor”

Çözüm: Dosya uzantısını desteklenen listeye (50+ format) karşı doğrulayın ve desteklenmeyen tipleri önce PDF’ye dönüştürün.

private static readonly HashSet<string> SupportedFormats = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
    ".docx", ".doc", ".pdf", ".xlsx", ".xls", ".pptx", ".ppt", ".txt", ".rtf"
};

public static bool IsFormatSupported(string filePath)
{
    var extension = Path.GetExtension(filePath);
    return SupportedFormats.Contains(extension);
}

Sorun 2: Büyük Dosyalarda Bellek Sorunları

Çözüm: Akışı etkinleştirin ve dosyaları parçalar halinde işleyin.

public static void CompareLargeDocuments(string sourcePath, string targetPath, string outputPath)
{
    var fileInfo = new FileInfo(sourcePath);
    
    if (fileInfo.Length > 50 * 1024 * 1024) // 50MB threshold
    {
        // Use streaming approach
        using (var sourceStream = File.OpenRead(sourcePath))
        using (var targetStream = File.OpenRead(targetPath))
        using (var outputStream = File.Create(outputPath))
        using (var comparer = new Comparer(sourceStream))
        {
            comparer.Add(targetStream);
            comparer.Compare(outputStream);
        }
    }
    else
    {
        // Standard approach for smaller files
        using (var comparer = new Comparer(sourcePath))
        {
            comparer.Add(targetPath);
            comparer.Compare(outputPath);
        }
    }
}

Sorun 3: Boş Karşılaştırma Sonucu

Çözüm: DetectFormattingChanges veya DetectStyleChanges seçeneklerini değiştirerek duyarlılığı artırın.

var compareOptions = new CompareOptions
{
    DetectStyleChanges = true,
    DiagramMasterSetting = new DiagramMasterSetting
    {
        UseSourceMaster = true,
        CloneSourceMaster = true
    },
    OriginalSize = new Size(600, 800),
    HeaderFootersComparison = true,
    PaperSize = PaperSize.A4
};

Sıkça Sorulan Sorular

S: Aynı anda kaç belge karşılaştırabilirim?
C: Tek bir Comparer örneğine tekrarlanan Add() çağrılarıyla birden fazla hedef belge ekleyebilirsiniz, ancak büyük toplu işlemler için bunları sıralı işlemek önerilir.

S: GroupDocs.Comparison şifre korumalı dosyaları işleyebilir mi?
C: Evet—Comparer oluştururken veya belgeyi yüklerken şifreyi geçirin.

using (var comparer = new Comparer(sourcePath, new LoadOptions("password")))
{
    comparer.Add(targetPath, new LoadOptions("targetPassword"));
    comparer.Compare(outputPath);
}

S: GroupDocs.Comparison hangi dosya formatlarını destekliyor?
C: DOCX, XLSX, PPTX, PDF, JPEG, PNG, TXT ve daha fazlası dahil olmak üzere 50’den fazla format.

S: Değişikliklerin görünümünü nasıl özelleştirebilirim?
C: ComparisonSettings kullanarak InsertedColor, DeletedColor ve StyleChangeColor ayarlarını yapın.

var compareOptions = new CompareOptions
{
    InsertedItemStyle = new StyleSettings
    {
        HighlightColor = Color.Green,
        FontColor = Color.DarkGreen
    },
    DeletedItemStyle = new StyleSettings
    {
        HighlightColor = Color.Red,
        FontColor = Color.DarkRed
    }
};

S: Belirli değişiklik türlerini yok saymak mümkün mü?
C: Kesinlikle—ComparisonSettings içinde DetectStyleChanges veya DetectTableChanges gibi seçenekleri devre dışı bırakın.

var compareOptions = new CompareOptions
{
    DetectStyleChanges = false, // Ignore formatting changes
    HeaderFootersComparison = false, // Skip headers/footers
    WordsSeparatorChars = new[] { ' ', '\n', '\r', '\t' } // Define word boundaries
};

S: Bulut depolamada saklanan belgeleri karşılaştırabilir miyim?
C: Evet—akışları yerel olarak indirin veya doğrudan bir MemoryStream üzerinden karşılaştırın.

using (var sourceStream = await DownloadFromCloudAsync(sourceUrl))
using (var targetStream = await DownloadFromCloudAsync(targetUrl))
using (var comparer = new Comparer(sourceStream))
{
    comparer.Add(targetStream);
    comparer.Compare(outputStream);
}

S: GroupDocs.Comparison’ı bir Docker konteyneri içinde nasıl çalıştırırım?
C: Gerekli yerel bağımlılıkları Dockerfile’ınıza ekleyin ve lisans dosyasını konteynere kopyalayın.

FROM mcr.microsoft.com/dotnet/aspnet:6.0
# Install necessary fonts and libraries for document processing
RUN apt-get update && apt-get install -y libfontconfig1 libfreetype6

S: Üretim için hangi lisans gereklidir?
C: Üretim dağıtımları için ticari bir GroupDocs.Comparison lisansı zorunludur. Seçenekler arasında geliştirici, site ve OEM lisansları bulunur.

S: Karşılaştırma hatalarını nazikçe nasıl ele almalı?
C: Karşılaştırma çağrısını bir try‑catch bloğuna sarın, istisnayı kaydedin ve kullanıcı dostu bir hata mesajı döndürün.

public async Task<ComparisonResult> CompareDocumentsWithRetry(string source, string target, int maxRetries = 3)
{
    for (int attempt = 1; attempt <= maxRetries; attempt++)
    {
        try
        {
            using (var comparer = new Comparer(source))
            {
                comparer.Add(target);
                var outputPath = GenerateOutputPath();
                comparer.Compare(outputPath);
                
                return new ComparisonResult { Success = true, OutputPath = outputPath };
            }
        }
        catch (Exception ex) when (attempt < maxRetries)
        {
            _logger.LogWarning($"Comparison attempt {attempt} failed: {ex.Message}. Retrying...");
            await Task.Delay(TimeSpan.FromSeconds(attempt * 2)); // Exponential backoff
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"Comparison failed after {maxRetries} attempts");
            return new ComparisonResult { Success = false, Error = ex.Message };
        }
    }
    
    return new ComparisonResult { Success = false, Error = "Max retries exceeded" };
}

Temel Kaynaklar ve Dokümantasyon


Son Güncelleme: 2026-06-10
Test Edilen Versiyon: GroupDocs.Comparison 25.4.0 for .NET
Yazar: GroupDocs

Install-Package GroupDocs.Comparison -Version 25.4.0
dotnet add package GroupDocs.Comparison --version 25.4.0
using GroupDocs.Comparison;

İlgili Eğitimler