| categories |
|
||||
|---|---|---|---|---|---|
| date | 2026-03-06 | ||||
| description | Erfahren Sie, wie Sie Ziel-Metadaten bei Dokumentvergleichen mit GroupDocs.Comparison für .NET erhalten. Schritt-für-Schritt-Anleitung mit C#‑Beispielen. | ||||
| keywords | preserve target metadata, GroupDocs.Comparison metadata preservation, .NET document comparison, metadata preservation tutorial | ||||
| lastmod | 2026-03-06 | ||||
| linktitle | Metadata Preservation Tutorial | ||||
| tags |
|
||||
| title | Zielmetadaten beibehalten mit GroupDocs.Comparison – .NET‑Tutorial | ||||
| type | docs | ||||
| url | /de/net/advanced-comparison/groupdocs-comparison-net-metadata-target/ | ||||
| weight | 1 |
Haben Sie schon einmal zwei Dokumente verglichen und dabei wichtige Metadaten verloren? Sie sind nicht allein. Wenn Sie Zielmetadaten beibehalten müssen, während Sie Dokumente in einer .NET‑Anwendung vergleichen, kann die Aufgabe knifflig erscheinen – muss es aber nicht.
GroupDocs.Comparison für .NET lässt Sie entscheiden, welche Dokument‑Metadaten im Vergleichsergebnis erhalten bleiben. Egal, ob Sie ein Dokumenten‑Management‑System bauen, Rechtsverträge bearbeiten oder kollaborativen Inhalt verwalten, Sie wollen jedes Mal die Metadaten aus dem richtigen Quelldokument.
In diesem Tutorial lernen Sie, wie Sie Zielmetadaten beibehalten während des Vergleichs, häufige Fallstricke vermeiden und die Lösung in realen Szenarien implementieren.
- Was bedeutet „Zielmetadaten beibehalten“? Es bewahrt die Metadaten (Autor, Erstellungsdatum, benutzerdefinierte Eigenschaften usw.) des Dokuments, das Sie als Ziel festlegen, beim Erzeugen des Vergleichsergebnisses.
- Welche GroupDocs.Comparison‑Version wird benötigt? Version 25.4.0 oder neuer.
- Kann ich das mit .NET Core verwenden? Ja – .NET Core 2.0+ oder .NET Framework 4.6.1+.
- Ist für die Produktion eine Lizenz erforderlich? Für die Produktion ist eine kommerzielle Lizenz erforderlich; eine kostenlose Testversion reicht für Lernzwecke.
- Funktioniert das Feature mit PDF und DOCX? Ja – alle gängigen Office‑ und PDF‑Formate unterstützen das Beibehalten von Metadaten.
Bevor wir zum Code springen, sprechen wir darüber, warum das Beibehalten von Zielmetadaten wichtig ist. Dokumenten‑Metadaten sind nicht nur „schön zu haben“ – sie sind oft gesetzlich vorgeschrieben oder geschäftskritisch:
- Rechtsdokumente – müssen Anwalts‑Mandanten‑Privilegien‑Markierungen beibehalten.
- Unternehmensdateien – müssen Compliance‑Tags und Genehmigungsketten erhalten.
- Wissenschaftliche Arbeiten – Autorennennung und Versionshistorie sind essenziell.
- Technische Dokumentation – Versionskontrolle und Review‑Status sind wichtig.
Ohne richtige Handhabung könnten Sie versehentlich Informationen entfernen, deren Erstellung Monate gedauert hat. Genau hier glänzt die Zielmetadaten‑Beibehalten‑Option.
- GroupDocs.Comparison für .NET: Version 25.4.0 oder neuer (frühere Versionen haben eingeschränkte Metadaten‑Optionen).
- .NET Framework: 4.6.1 oder höher, oder .NET Core 2.0+.
- Visual Studio (oder jede andere bevorzugte C#‑IDE).
- Grundkenntnisse in C# (nichts zu Fortgeschrittenes, versprochen!).
- Zwei Beispieldokumente zum Testen (Word .docx funktioniert hervorragend).
Sie müssen kein GroupDocs‑Experte sein, sollten aber mit Folgendem vertraut sein:
- C#
using‑Anweisungen und Dateiverarbeitung. - Grundlegende Konzepte der Dokumenten‑Verarbeitung.
- Was Metadaten eigentlich sind (Autor, Titel, benutzerdefinierte Eigenschaften usw.).
Bereit? Lassen Sie uns das einrichten.
Die Installation von GroupDocs.Comparison ist unkompliziert, aber es gibt ein paar Stolperfallen.
NuGet Package Manager Console (einfachste Methode):
Install-Package GroupDocs.Comparison -Version 25.4.0.NET CLI (wenn Sie die Befehlszeile bevorzugen):
dotnet add package GroupDocs.Comparison --version 25.4.0Pro‑Tipp: Geben Sie immer die Version an, um unerwartete Breaking Changes in Ihrem Projekt zu vermeiden.
Hier bleiben viele Entwickler zunächst hängen. GroupDocs.Comparison ist nicht kostenlos, aber Sie haben Optionen:
- Kostenlose Testversion – volle Funktionalität für 30 Tage, ideal für die Evaluation.
- Temporäre Lizenz – erweiterter Evaluationszeitraum, falls Sie mehr Zeit benötigen.
- Kommerzielle Lizenz – für den Produktionseinsatz (verschiedene Preismodelle verfügbar).
Machen Sie sich jetzt keine Sorgen um Lizenzen, wenn Sie nur lernen – die Testversion enthält alle Zielmetadaten‑Beibehalten‑Funktionen.
Stellen wir sicher, dass alles mit einem einfachen Test funktioniert:
using System.IO;
using GroupDocs.Comparison;
string sourceFilePath = "source.docx";
string targetFilePath = "target.docx";
// Initialize the Comparer object.
using (Comparer comparer = new Comparer(sourceFilePath))
{
// Add the target document for comparison.
comparer.Add(targetFilePath);
}Wenn das ohne Fehler kompiliert, können Sie loslegen. Wenn nicht, prüfen Sie Ihre Paketinstallation und die using‑Anweisungen erneut.
Jetzt zum Kern – das eigentliche Beibehalten von Metadaten während des Dokumentenvergleichs. Hier zeigt GroupDocs.Comparison seine Stärken.
Während eines typischen Vergleichs:
- Source‑Dokument liefert den Basisinhalt.
- Target‑Dokument liefert die zu vergleichenden Änderungen.
- Das Output‑Dokument kombiniert beides, aber wessen Metadaten gewinnen?
Standardmäßig verwendet GroupDocs.Comparison die Metadaten des Source‑Dokuments. Um Zielmetadaten beizubehalten, müssen Sie die API explizit anweisen.
Damit wird das „Baseline“‑Dokument festgelegt – das Dokument, gegen das Sie vergleichen:
using (Comparer comparer = new Comparer(sourceFilePath))
{
// All comparison operations happen within this scope
}Warum using‑Anweisungen verwenden? Sie entsorgen Ressourcen automatisch und verhindern Speicherlecks bei großen Dokumenten. Vertrauen Sie mir, Sie werden sich später bedanken, wenn Sie mit 50 MB‑Word‑Dateien arbeiten.
Teilen Sie dem Comparer mit, welches Dokument die zu analysierenden Änderungen enthält:
comparer.Add(targetFilePath);Häufiger Fehler: Verwechseln von Source und Target. Denken Sie so: Source ist Ihr „Original“, Target ist Ihre „aktualisierte Version“.
Geben Sie an, welche Dokument‑Metadaten im Ergebnis erhalten bleiben sollen:
comparer.Compare(outputFileName, new SaveOptions() { CloneMetadataType = MetadataType.Target });Was passiert? CloneMetadataType = MetadataType.Target sagt GroupDocs.Comparison: „Hey, ich möchte die Metadaten des Ziel‑Dokuments im Endergebnis behalten.“
Hier ist alles zusammen in einem ausführbaren Programm:
using System;
using System.IO;
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
class Program
{
static void Main(string[] args)
{
try
{
string sourceFile = "original_document.docx";
string targetFile = "updated_document.docx";
string outputFile = "comparison_result.docx";
using (Comparer comparer = new Comparer(sourceFile))
{
comparer.Add(targetFile);
// Preserve target document metadata
comparer.Compare(outputFile, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
Console.WriteLine($"Comparison completed! Check {outputFile}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error during comparison: {ex.Message}");
}
}
}Dateipfad‑Probleme – immer vollständige Pfade verwenden oder sicherstellen, dass Ihre Dateien im Arbeitsverzeichnis liegen:
// Good
string sourceFile = Path.Combine(Directory.GetCurrentDirectory(), "docs", "source.docx");
// Risky (might work locally but fail in production)
string sourceFile = "source.docx";Speicherverwaltung – bei großen Dokumenten immer Comparer‑Objekte in using‑Blöcken einbetten.
Versionskompatibilität – verschiedene GroupDocs.Comparison‑Releases bieten unterschiedliche Metadaten‑Optionen – bleiben Sie bei 25.4.0 oder neuer für optimale Ergebnisse.
| Szenario | Bevorzugen Target‑Metadaten | Bevorzugen Source‑Metadaten |
|---|---|---|
| Aktualisierte Autoren‑Info benötigt | ✅ | ❌ |
| Originaldokument hat rechtliche Priorität | ❌ | ✅ |
| Benutzerdefinierte Eigenschaften nur in neuer Datei | ✅ | ❌ |
| Sie möchten die Historie des „Master“‑Dokuments behalten | ❌ | ✅ |
Sie können gegen mehrere Targets vergleichen und dennoch die Metadaten des ersten hinzugefügten Targets beibehalten:
using (Comparer comparer = new Comparer(sourceFilePath))
{
comparer.Add(targetFilePath1);
comparer.Add(targetFilePath2);
comparer.Add(targetFilePath3);
// Metadata will come from the first target document
comparer.Compare(outputFileName, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
}Anwaltskanzleien müssen häufig Vertragsversionen vergleichen und dabei bestimmte Metadaten‑Marker beibehalten:
// Preserve client metadata from updated contract
using (Comparer comparer = new Comparer("original_contract.docx"))
{
comparer.Add("client_revised_contract.docx");
comparer.Compare("final_contract_comparison.docx", new SaveOptions()
{
CloneMetadataType = MetadataType.Target // Keep client's metadata
});
}Wenn mehrere Forschende zusammenarbeiten, wollen Sie die aktuellsten Autor‑Informationen beibehalten:
// Keep metadata from the researcher's latest submission
using (Comparer comparer = new Comparer("draft_paper.docx"))
{
comparer.Add("researcher_updates.docx");
comparer.Compare("paper_comparison.docx", new SaveOptions()
{
CloneMetadataType = MetadataType.Target // Preserve researcher metadata
});
}In regulierten Branchen ist das Aufrechterhalten von Compliance‑Metadaten entscheidend:
// Preserve compliance tags from updated policy document
using (Comparer comparer = new Comparer("old_policy.docx"))
{
comparer.Add("compliance_approved_policy.docx");
comparer.Compare("policy_comparison.docx", new SaveOptions()
{
CloneMetadataType = MetadataType.Target // Keep compliance metadata
});
}Das häufigste Problem. Debuggen Sie mit expliziten Prüfungen:
string sourceFile = "source.docx";
// Always check if files exist before comparison
if (!File.Exists(sourceFile))
{
Console.WriteLine($"Source file not found: {Path.GetFullPath(sourceFile)}");
return;
}
// Same for target files
if (!File.Exists(targetFile))
{
Console.WriteLine($"Target file not found: {Path.GetFullPath(targetFile)}");
return;
}Für Dokumente über 10 MB sollten Sie folgende Optimierungen in Betracht ziehen:
// Use explicit disposal for large documents
using (var comparer = new Comparer(sourceFile))
{
comparer.Add(targetFile);
var saveOptions = new SaveOptions()
{
CloneMetadataType = MetadataType.Target
};
comparer.Compare(outputFile, saveOptions);
// Explicitly clean up
GC.Collect();
GC.WaitForPendingFinalizers();
}Beim Arbeiten mit geschützten Dateien oder Netzwerkfreigaben:
try
{
using (var comparer = new Comparer(sourceFile))
{
comparer.Add(targetFile);
comparer.Compare(outputFile, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
}
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine("Access denied. Check file permissions.");
Console.WriteLine($"Details: {ex.Message}");
}
catch (IOException ex)
{
Console.WriteLine("File I/O error occurred.");
Console.WriteLine($"Details: {ex.Message}");
}GroupDocs.Comparison kann speicherintensiv sein. Nutzen Sie using‑Anweisungen, um die Entsorgung sicherzustellen:
// Good - automatic resource cleanup
using (var comparer = new Comparer(sourceFile))
{
// comparison logic here
}
// Bad - potential memory leaks
var comparer = new Comparer(sourceFile);
// ... comparison logic
// comparer.Dispose(); // Easy to forget!Dokumente stapelweise verarbeiten – wenn Sie viele Dateien vergleichen, bearbeiten Sie sie in kleineren Gruppen, um den Speicherverbrauch gering zu halten.
Für Desktop‑ oder Web‑Apps wickeln Sie den Vergleich in eine async‑Methode ein:
public async Task<bool> CompareDocumentsAsync(string source, string target, string output)
{
return await Task.Run(() =>
{
try
{
using (var comparer = new Comparer(source))
{
comparer.Add(target);
comparer.Compare(output, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
return true;
}
}
catch
{
return false;
}
});
}- Klein (< 1 MB) – direkt verarbeiten.
- Mittel (1‑10 MB) – Fortschritt anzeigen, um UI‑Responsivität zu erhalten.
- Groß (> 10 MB) – immer asynchron verarbeiten und ggf. explizites GC wie oben gezeigt einsetzen.
Unten finden Sie einen sofort einsatzbereiten Controller, der zwei hochgeladene Dateien entgegennimmt, den Vergleich ausführt und das Ergebnis zurückgibt, während Zielmetadaten beibehalten werden:
[ApiController]
[Route("api/[controller]")]
public class DocumentComparisonController : ControllerBase
{
[HttpPost("compare-with-target-metadata")]
public async Task<IActionResult> CompareWithTargetMetadata(
IFormFile sourceFile,
IFormFile targetFile)
{
var tempSource = Path.GetTempFileName();
var tempTarget = Path.GetTempFileName();
var outputPath = Path.GetTempFileName();
try
{
// Save uploaded files temporarily
await sourceFile.CopyToAsync(new FileStream(tempSource, FileMode.Create));
await targetFile.CopyToAsync(new FileStream(tempTarget, FileMode.Create));
// Perform comparison with target metadata preservation
using (var comparer = new Comparer(tempSource))
{
comparer.Add(tempTarget);
comparer.Compare(outputPath, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
}
// Return comparison result
var resultBytes = await System.IO.File.ReadAllBytesAsync(outputPath);
return File(resultBytes, "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"comparison_result.docx");
}
finally
{
// Clean up temporary files
if (System.IO.File.Exists(tempSource)) System.IO.File.Delete(tempSource);
if (System.IO.File.Exists(tempTarget)) System.IO.File.Delete(tempTarget);
if (System.IO.File.Exists(outputPath)) System.IO.File.Delete(outputPath);
}
}
}Q: Kann ich Metadaten von mehreren Ziel‑Dokumenten beim Vergleich beibehalten?
A: Wenn Sie mehrere Ziel‑Dateien hinzufügen, verwendet GroupDocs.Comparison die Metadaten des ersten hinzugefügten Ziel‑Dokuments. Fügen Sie das Dokument, dessen Metadaten Sie behalten möchten, zuerst in die Kette ein.
Q: Was passiert, wenn das Ziel‑Dokument einige Metadaten‑Felder nicht enthält?
A: Nur die im Ziel vorhandenen Metadaten werden in das Ergebnis kopiert. Fehlende Felder werden einfach weggelassen; der Vergleich schlägt trotzdem fehl.
Q: Wie gehe ich mit passwortgeschützten Dokumenten um?
A: Verwenden Sie ein LoadOptions‑Objekt mit dem Passwort und übergeben Sie es dem Comparer‑Konstruktor:
var loadOptions = new LoadOptions() { Password = "your_password" };
using (var comparer = new Comparer(sourceFile, loadOptions))
{
// comparison logic here
}Q: Gibt es eine Möglichkeit, nur ausgewählte Metadaten‑Eigenschaften beizubehalten?
A: Die aktuelle API bewahrt alle Metadaten der gewählten Quelle (Target oder Source). Für eine feinkörnige Kontrolle müssten Sie die Eigenschaften nach dem Vergleich extrahieren und manuell wieder anwenden.
Q: Welche Dokumentformate unterstützen das Beibehalten von Metadaten?
A: Die meisten gängigen Business‑Formate – DOCX, PDF, PPTX, XLSX und viele weitere – unterstützen das Beibehalten von Metadaten. Siehe die offizielle Dokumentation für die vollständige Liste.
Q: Wo bekomme ich Hilfe, wenn ich auf Probleme stoße?
A: Besuchen Sie das GroupDocs Support Forum für Community‑Unterstützung oder kontaktieren Sie den GroupDocs‑Support direkt, wenn Sie eine kommerzielle Lizenz besitzen.
- Offizielle Dokumentation: GroupDocs.Comparison for .NET Docs
- API‑Referenz: Complete API Reference
- Neueste Version herunterladen: GroupDocs Downloads
- Kostenlose Testversion: Start Your Trial
- Kaufoptionen: Licensing and Pricing
Zuletzt aktualisiert: 2026-03-06
Getestet mit: GroupDocs.Comparison 25.4.0 für .NET
Autor: GroupDocs