# Wie man QR-Code-Fehlermeldungen in C# behandelt
Die Fehlerbehandlung von IronQR hilft Ihnen, Lese- und Schreibfehler zu erkennen, Diagnosedaten zu protokollieren und aus jedem Scan klare Ergebnisse zu erhalten. Wenn Sie keine expliziten Prüfungen hinzufügen, liefern sowohl ein leeres Ergebnis als auch eine beschädigte Datei keine Ergebnisse, sodass Sie nicht wissen, was schiefgelaufen ist. Durch gezielte Ausnahmebehandlung und Diagnoseprotokollierung können Sie unbemerkte Fehler in nützliches Feedback umwandeln. Dieser Leitfaden erklärt, wie man mit leeren Ergebnissen umgeht, Ausnahmen beim Schreiben verwaltet und einen strukturierten Protokollierungs-Wrapper für die Stapelverarbeitung erstellt.
*as-heading:2(Schnellstart: QR-Code-Fehler behandeln)*
Führen Sie QR-Lesevorgänge in einem `try-catch` Block aus und protokollieren Sie Diagnosen für Datei- und Dekodierungsfehler.
```csharp
:title=Quickstart
using IronQr;
using IronSoftware.Drawing;
try
{
var input = new QrImageInput(AnyBitmap.FromFile("label.png"));
var results = new QrReader().Read(input);
Console.WriteLine($"Found {results.Count()} QR code(s)");
}
catch (IOException ex)
{
Console.Error.WriteLine($"File error: {ex.Message}");
}
```
<div class="hsg-featured-snippet">
<h3>Minimaler Arbeitsablauf (5 Schritte)</h3>
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronQR/">Laden Sie die IronQR C#-Bibliothek zur Fehlerbehandlung von QR-Codes herunter.</a></li>
<li>Verpacken Sie QR-Lese-/Schreibaufrufe in <code>try-catch</code> Blöcke</li>
<li>Fangen Sie <code>IOException</code> und <code>ArgumentException</code> für spezifische Fehler ab.</li>
<li>Protokolldiagnose für leere Ergebnisse und Ausnahmen</li>
<li>Verwenden Sie strukturiertes JSON-Logging für die Pipeline-Überwachung.</li>
</ol>
</div>
## Behandlung von Lesefehlern und leeren Ergebnissen
Ohne Protokollierung erscheinen ein leeres Ergebnis und eine beschädigte Datei für den Aufrufer identisch. Das folgende Beispiel erkennt Dateizugriffsfehler und gibt eine Warnung aus, wenn der Scan keine Ergebnisse liefert.
### Eingabe
Dieser QR-Code-Beispiel-Eingabetext ist auf der Festplatte vorhanden. Wir werden beide Szenarien simulieren: eines, in dem der Benutzer die Datei abruft und dekodiert, und ein anderes, in dem der Dateipfad falsch ist.
<div class="content-img-align-center">
<div class="center-image-wrapper">
<img src="/static-assets/qr/how-to/detailed-error-messages/input-scan-one.webp"
alt="Gültige QR-Code-Eingabekodierung https://ironsoftware.com/qr/scan-1"
class="img-responsive add-shadow" />
</div>
</div>
```cs
using IronQr;
using IronSoftware.Drawing;
string filePath = "damaged-scan.png";
try
{
// File-level failure throws IOException or FileNotFoundException
var inputBmp = AnyBitmap.FromFile(filePath);
var imageInput = new QrImageInput(inputBmp);
var reader = new QrReader();
IEnumerable<QrResult> results = reader.Read(imageInput);
if (!results.Any())
{
// Not an exception — but a diagnostic event worth logging
Console.Error.WriteLine($"[WARN] No QR codes found in: {filePath}");
Console.Error.WriteLine($" Action: Verify image quality or try a different scan");
}
else
{
foreach (QrResult result in results)
{
Console.WriteLine($"[{result.QrType}] {result.Value}");
}
}
}
catch (FileNotFoundException)
{
Console.Error.WriteLine($"[ERROR] File not found: {filePath}");
}
catch (IOException ex)
{
Console.Error.WriteLine($"[ERROR] Cannot read file: {filePath} — {ex.Message}");
}
catch (Exception ex)
{
Console.Error.WriteLine($"[ERROR] Unexpected failure reading {filePath}: {ex.GetType().Name} — {ex.Message}");
}
```
### Ausgabe
<div class="content-img-align-center">
<div class="center-image-wrapper">
<img src="/static-assets/qr/how-to/detailed-error-messages/success-output-qr.webp" alt="Die Terminalausgabe zeigt [QRCode] https://ironsoftware.com/qr/scan-1 für ein erfolgreiches Einlesen des QR-Codes an." class="img-responsive add-shadow" />
</div>
</div>
[[i:(Ein erfolgreicher Lesevorgang würde einfach den QR-Code-Wert zurückgeben, während ein Fehler während der Laufzeit die unten gezeigte Ausnahmemeldung oder Warnungen anzeigen würde.)]]
Die Konsole unten zeigt ein `[WARN]` für den Fall von leeren Ergebnissen und ein `[ERROR]` für die fehlende Datei, jeweils mit dem Dateipfad und einer vorgeschlagenen Aktion.
<div class="content-img-align-center">
<div class="center-image-wrapper">
<img src="/static-assets/qr/how-to/detailed-error-messages/output-read-diagnostics.webp" alt="Die Terminalausgabe zeigt eine Warnung an, dass in damage-scan.png keine QR-Codes gefunden wurden, und einen Fehler, dass die Datei missing-label.png nicht gefunden wurde." class="img-responsive add-shadow" />
</div>
</div>
---
## Behandlung von Schreibfehlern
Das Übergeben von `null` an `QrWriter.Write` löst ein `IronQrEncodingException` aus. Daten, die die Kapazität für das konfigurierte [Fehlerkorrekturniveau](https://ironsoftware.com/csharp/qr/how-to/error-correction-qr-code/) überschreiten, werden ebenfalls ausgeworfen, da höhere Korrekturniveaus die verfügbare Datenkapazität verringern.
### Eingabe
Die beiden folgenden Eingabevariablen definieren die Fehlerszenarien: `nullContent` ist `null` und `oversizedContent` ist ein 5.000-Zeichen langer String, der die QR-Kapazität bei höchster Korrekturstufe überschreitet.
```cs
using IronQr;
string? content = null; // null throws IronQrEncodingException
string oversizedContent = new string('A', 5000); // 5,000 chars exceeds QR capacity at Highest error correction level
// Scenario 1: null input
try
{
QrCode qr = QrWriter.Write(content); // Input
}
catch (Exception ex)
{
Console.Error.WriteLine($"[ERROR] Null content: {ex.GetType().Name} — {ex.Message}"); // Output
}
// Scenario 2: data exceeds QR capacity at the configured error correction level
try
{
var options = new QrOptions(QrErrorCorrectionLevel.Highest);
QrCode qr = QrWriter.Write(oversizedContent, options); // Input
}
catch (Exception ex)
{
Console.Error.WriteLine($"[ERROR] QR capacity exceeded: {ex.Message}"); // Output
Console.Error.WriteLine($" Input length: {oversizedContent.Length} chars");
Console.Error.WriteLine($" Action: Reduce content or lower error correction level");
}
```
### Ausgabe
Die Konsole zeigt den Ausnahmetyp und die Fehlermeldung für beide Fehlerszenarien an.
<div class="content-img-align-center">
<div class="center-image-wrapper">
<img src="/static-assets/qr/how-to/detailed-error-messages/output-write-diagnostics.webp" alt="Terminalausgabe mit Meldung über eine IronQrEncodingException für Null-Inhalte, die an QrWriter.Write übergeben wurden." class="img-responsive add-shadow" />
</div>
</div>
Protokollieren Sie die Eingabelänge zusammen mit der Fehlermeldung, um festzustellen, ob das Problem einen kürzeren Inhalt oder eine niedrigere Korrekturstufe erfordert. Um den Aufwand für Ausnahmen zu reduzieren und die Diagnose zu verbessern, sollten Benutzereingaben vor der Kodierung auf die Länge der Zeichenkette geprüft und auf Nullwerte untersucht werden.
---
## Protokollierung von QR-Code-Operationen
Verwenden Sie `IronSoftware.Logger`, um interne Diagnosen zu erfassen. Implementieren Sie für jeden Lesevorgang eine Hilfsfunktion, die den Dateipfad, die Anzahl der Ergebnisse und die verstrichene Zeit als JSON protokolliert, um eine übersichtliche Ausgabe für den gesamten Batch zu gewährleisten.
### Eingabe
Das Batch umfasst vier gültige QR-Code-Bilder von `qr-scans/` und eine fünfte Datei, `scan-05-broken.png`, mit ungültigen Bytes.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 22.5%;">
<img src="/static-assets/qr/how-to/detailed-error-messages/input-scan-one.webp"
alt="QR-Code, der https://ironsoftware.com/qr/scan-1 codiert"
class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">
Scan 1
</p>
</div>
<div class="competitors__card" style="width: 22.5%;">
<img src="/static-assets/qr/how-to/detailed-error-messages/input-scan-two.webp"
alt="QR-Code, der https://ironsoftware.com/qr/scan-2 codiert"
class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">
Scan 2
</p>
</div>
<div class="competitors__card" style="width: 22.5%;">
<img src="/static-assets/qr/how-to/detailed-error-messages/input-scan-three.webp"
alt="QR-Code, der https://ironsoftware.com/qr/scan-3 codiert"
class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">
Scan 3
</p>
</div>
<div class="competitors__card" style="width: 22.5%;">
<img src="/static-assets/qr/how-to/detailed-error-messages/input-scan-four.webp"
alt="QR-Code, der https://ironsoftware.com/qr/scan-4 codiert"
class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">
Scan 4
</p>
</div>
</div>
```cs
using IronQr;
using IronSoftware.Drawing;
using System.Diagnostics;
// Enable shared Iron Software logging for internal diagnostics
IronQr.Logging.Logger.LoggingMode = IronQr.Logging.Logger.LoggingModes.All;
IronQr.Logging.Logger.LogFilePath = "ironqr-debug.log";
// Reusable wrapper for structured observability
(IEnumerable<QrResult> Results, bool Success, string Error) ReadQrWithDiagnostics(string filePath)
{
var sw = Stopwatch.StartNew();
try
{
var input = new QrImageInput(AnyBitmap.FromFile(filePath));
var results = new QrReader().Read(input).ToList();
sw.Stop();
Console.WriteLine($"{{\"op\":\"qr_read\",\"file\":\"{Path.GetFileName(filePath)}\","
+ $"\"status\":\"ok\",\"count\":{results.Count},\"ms\":{sw.ElapsedMilliseconds}}}");
return (results, true, null);
}
catch (Exception ex)
{
sw.Stop();
string error = $"{ex.GetType().Name}: {ex.Message}";
Console.Error.WriteLine($"{{\"op\":\"qr_read\",\"file\":\"{Path.GetFileName(filePath)}\","
+ $"\"status\":\"error\",\"exception\":\"{ex.GetType().Name}\","
+ $"\"message\":\"{ex.Message}\",\"ms\":{sw.ElapsedMilliseconds}}}");
return (Enumerable.Empty<QrResult>(), false, error);
}
}
// Usage: process a batch with per-file isolation
string[] files = Directory.GetFiles("qr-scans/", "*.png");
int ok = 0, fail = 0;
foreach (string file in files)
{
var (results, success, error) = ReadQrWithDiagnostics(file);
if (success && results.Any()) ok++;
else fail++;
}
Console.WriteLine($"\nBatch complete: {ok} success, {fail} failed/empty out of {files.Length} files");
```
### Ausgabe
Die Konsole zeigt JSON-Protokollzeilen für jede Datei an: vier erfolgreiche Lesevorgänge und einen strukturierten Fehlereintrag für die beschädigte Datei, gefolgt von der Batch-Zusammenfassung. `IronSoftware.Logger` schreibt interne Diagnosen gleichzeitig an `IronQR-debug.log`. Sie können das vollständige Debug-Protokoll [hier](/static-assets/qr/how-to/detailed-error-messages/ironqr-debug.log) herunterladen.
<div class="content-img-align-center">
<div class="center-image-wrapper">
<img src="/static-assets/qr/how-to/detailed-error-messages/output-logging-wrapper.webp" alt="Terminalausgabe mit JSON-strukturierten Protokollzeilen für 4 erfolgreiche Lesevorgänge und 1 Fehler Plus einer Zusammenfassung des abgeschlossenen Batches." class="img-responsive add-shadow" />
</div>
</div>
Die JSON-Ausgabe wird direkt in Log-Aggregationstools eingespeist: leiten Sie `stdout` an Fluentd, Datadog oder CloudWatch in einer containerisierten Bereitstellung weiter. Das `ms`-Feld zeigt Latenzregressionen auf, und das Debug-Protokoll erfasst interne Verarbeitungsschritte, die der Wrapper nicht aufzeichnet.
---
## Weiterführende Literatur
- [Fehlerkorrekturstufen](https://ironsoftware.com/csharp/qr/how-to/error-correction-qr-code/) : QR-Fehlertoleranz auf Codierungsebene anpassen.
- [Anleitung zum Lesen von QR-Codes](https://ironsoftware.com/csharp/qr/how-to/read-qr-codes-from-image/) : Eine vollständige Schritt-für-Schritt-Anleitung zum Lesen.
- [QR-Code-Generator-Tutorial](https://ironsoftware.com/csharp/qr/tutorials/csharp-qr-code-generator/) : Generierung mit Styling und Logos.
- [QrReader API-Referenz](https://ironsoftware.com/csharp/qr/object-reference/api/IronQr.QrReader.html) : Methodensignaturen und Anmerkungen.
- [QrWriter API Reference](https://ironsoftware.com/csharp/qr/object-reference/api/IronQr.QrWriter.html): all `Write` overloads.
[Sehen Sie sich die Lizenzoptionen an,](https://ironsoftware.com/csharp/qr/licensing/) wenn Sie bereit für die Produktion sind.
[Klicken Sie hier, um das vollständige Konsolenanwendungsprojekt DetailedErrorMessagesTest herunterzuladen](/static-assets/qr/how-to/detailed-error-messages/DetailedErrorMessagesTest.zip) .
Die Fehlerbehandlung von IronQR hilft Ihnen, Lese- und Schreibfehler zu erkennen, Diagnosedaten zu protokollieren und aus jedem Scan klare Ergebnisse zu erhalten. Wenn Sie keine expliziten Prüfungen hinzufügen, liefern sowohl ein leeres Ergebnis als auch eine beschädigte Datei keine Ergebnisse, sodass Sie nicht wissen, was schiefgelaufen ist. Durch gezielte Ausnahmebehandlung und Diagnoseprotokollierung können Sie unbemerkte Fehler in nützliches Feedback umwandeln. Dieser Leitfaden erklärt, wie man mit leeren Ergebnissen umgeht, Ausnahmen beim Schreiben verwaltet und einen strukturierten Protokollierungs-Wrapper für die Stapelverarbeitung erstellt.
Schnellstart: QR-Code-Fehler behandeln
Führen Sie QR-Lesevorgänge in einem try-catch Block aus und protokollieren Sie Diagnosen für Datei- und Dekodierungsfehler.
1Install IronQR with NuGet Package Manager
PM > Install-Package IronQR
Install-Package IronQR
2Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.
using IronQr;using IronSoftware.Drawing;try{ var input = new QrImageInput(AnyBitmap.FromFile("label.png")); var results = new QrReader().Read(input);Console.WriteLine($"Found {results.Count()} QR code(s)");}catch (IOException ex){Console.Error.WriteLine($"File error: {ex.Message}");}
using IronQr;
using IronSoftware.Drawing;
try
{
var input = new QrImageInput(AnyBitmap.FromFile("label.png"));
var results = new QrReader().Read(input);
Console.WriteLine($"Found {results.Count()} QR code(s)");
}
catch (IOException ex)
{
Console.Error.WriteLine($"File error: {ex.Message}");
}
C#
3Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronQR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Verpacken Sie QR-Lese-/Schreibaufrufe in try-catch Blöcke
Fangen Sie IOException und ArgumentException für spezifische Fehler ab.
Protokolldiagnose für leere Ergebnisse und Ausnahmen
Verwenden Sie strukturiertes JSON-Logging für die Pipeline-Überwachung.
Behandlung von Lesefehlern und leeren Ergebnissen
Ohne Protokollierung erscheinen ein leeres Ergebnis und eine beschädigte Datei für den Aufrufer identisch. Das folgende Beispiel erkennt Dateizugriffsfehler und gibt eine Warnung aus, wenn der Scan keine Ergebnisse liefert.
Eingabe
Dieser QR-Code-Beispiel-Eingabetext ist auf der Festplatte vorhanden. Wir werden beide Szenarien simulieren: eines, in dem der Benutzer die Datei abruft und dekodiert, und ein anderes, in dem der Dateipfad falsch ist.
using IronQr;using IronSoftware.Drawing;string filePath = "damaged-scan.png";try{ // File-level failure throws IOException or FileNotFoundException var inputBmp = AnyBitmap.FromFile(filePath); var imageInput = new QrImageInput(inputBmp); var reader = new QrReader(); IEnumerable<QrResult> results = reader.Read(imageInput); if (!results.Any()) { // Not an exception — but a diagnostic event worth loggingConsole.Error.WriteLine($"[WARN] No QR codes found in: {filePath}");Console.Error.WriteLine($" Action: Verify image quality or try a different scan"); } else { foreach (QrResult result in results) {Console.WriteLine($"[{result.QrType}] {result.Value}"); } }}catch (FileNotFoundException){Console.Error.WriteLine($"[ERROR] File not found: {filePath}");}catch (IOException ex){Console.Error.WriteLine($"[ERROR] Cannot read file: {filePath} — {ex.Message}");}catch (Exception ex){Console.Error.WriteLine($"[ERROR] Unexpected failure reading {filePath}: {ex.GetType().Name} — {ex.Message}");}
using IronQr;
using IronSoftware.Drawing;
string filePath = "damaged-scan.png";
try
{
// File-level failure throws IOException or FileNotFoundException
var inputBmp = AnyBitmap.FromFile(filePath);
var imageInput = new QrImageInput(inputBmp);
var reader = new QrReader();
IEnumerable<QrResult> results = reader.Read(imageInput);
if (!results.Any())
{
// Not an exception — but a diagnostic event worth logging
Console.Error.WriteLine($"[WARN] No QR codes found in: {filePath}");
Console.Error.WriteLine($" Action: Verify image quality or try a different scan");
}
else
{
foreach (QrResult result in results)
{
Console.WriteLine($"[{result.QrType}] {result.Value}");
}
}
}
catch (FileNotFoundException)
{
Console.Error.WriteLine($"[ERROR] File not found: {filePath}");
}
catch (IOException ex)
{
Console.Error.WriteLine($"[ERROR] Cannot read file: {filePath} — {ex.Message}");
}
catch (Exception ex)
{
Console.Error.WriteLine($"[ERROR] Unexpected failure reading {filePath}: {ex.GetType().Name} — {ex.Message}");
}
ImportsIronQrImportsIronSoftware.DrawingModuleModule1 Sub Main() Dim filePath AsString = "damaged-scan.png"Try ' File-level failure throws IOException or FileNotFoundException Dim inputBmp = AnyBitmap.FromFile(filePath) Dim imageInput = New QrImageInput(inputBmp) Dim reader = New QrReader() Dim results AsIEnumerable(OfQrResult) = reader.Read(imageInput) IfNot results.Any() Then ' Not an exception — but a diagnostic event worth loggingConsole.Error.WriteLine($"[WARN] No QR codes found in: {filePath}")Console.Error.WriteLine(" Action: Verify image quality or try a different scan") Else For Each result AsQrResultIn resultsConsole.WriteLine($"[{result.QrType}] {result.Value}") Next End IfCatch ex AsFileNotFoundExceptionConsole.Error.WriteLine($"[ERROR] File not found: {filePath}")Catch ex AsIOExceptionConsole.Error.WriteLine($"[ERROR] Cannot read file: {filePath} — {ex.Message}")Catch ex AsExceptionConsole.Error.WriteLine($"[ERROR] Unexpected failure reading {filePath}: {ex.GetType().Name} — {ex.Message}")EndTry End SubEndModule
Imports IronQr
Imports IronSoftware.Drawing
Module Module1
Sub Main()
Dim filePath As String = "damaged-scan.png"
Try
' File-level failure throws IOException or FileNotFoundException
Dim inputBmp = AnyBitmap.FromFile(filePath)
Dim imageInput = New QrImageInput(inputBmp)
Dim reader = New QrReader()
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)
If Not results.Any() Then
' Not an exception — but a diagnostic event worth logging
Console.Error.WriteLine($"[WARN] No QR codes found in: {filePath}")
Console.Error.WriteLine(" Action: Verify image quality or try a different scan")
Else
For Each result As QrResult In results
Console.WriteLine($"[{result.QrType}] {result.Value}")
Next
End If
Catch ex As FileNotFoundException
Console.Error.WriteLine($"[ERROR] File not found: {filePath}")
Catch ex As IOException
Console.Error.WriteLine($"[ERROR] Cannot read file: {filePath} — {ex.Message}")
Catch ex As Exception
Console.Error.WriteLine($"[ERROR] Unexpected failure reading {filePath}: {ex.GetType().Name} — {ex.Message}")
End Try
End Sub
End Module
Ausgabe
Hinweis:: Ein erfolgreicher Lesevorgang würde einfach den QR-Code-Wert zurückgeben, während ein Fehler während der Laufzeit die unten gezeigte Ausnahmemeldung oder Warnungen anzeigen würde.
Die Konsole unten zeigt ein [WARN] für den Fall von leeren Ergebnissen und ein [ERROR] für die fehlende Datei, jeweils mit dem Dateipfad und einer vorgeschlagenen Aktion.
Behandlung von Schreibfehlern
Das Übergeben von null an QrWriter.Write löst ein IronQrEncodingException aus. Daten, die die Kapazität für das konfigurierte Fehlerkorrekturniveau überschreiten, werden ebenfalls ausgeworfen, da höhere Korrekturniveaus die verfügbare Datenkapazität verringern.
Eingabe
Die beiden folgenden Eingabevariablen definieren die Fehlerszenarien: nullContent ist null und oversizedContent ist ein 5.000-Zeichen langer String, der die QR-Kapazität bei höchster Korrekturstufe überschreitet.
using IronQr;string? content = null; // null throws IronQrEncodingException string oversizedContent = new string('A', 5000); // 5,000 chars exceeds QR capacity at Highest error correction level // Scenario 1: null inputtry{ QrCode qr = QrWriter.Write(content); // Input}catch (Exception ex){Console.Error.WriteLine($"[ERROR] Null content: {ex.GetType().Name} — {ex.Message}"); // Output}// Scenario 2: data exceeds QR capacity at the configured error correction leveltry{ var options = new QrOptions(QrErrorCorrectionLevel.Highest); QrCode qr = QrWriter.Write(oversizedContent, options); // Input}catch (Exception ex){Console.Error.WriteLine($"[ERROR] QR capacity exceeded: {ex.Message}"); // OutputConsole.Error.WriteLine($" Input length: {oversizedContent.Length} chars");Console.Error.WriteLine($" Action: Reduce content or lower error correction level");}
using IronQr;
string? content = null; // null throws IronQrEncodingException
string oversizedContent = new string('A', 5000); // 5,000 chars exceeds QR capacity at Highest error correction level
// Scenario 1: null input
try
{
QrCode qr = QrWriter.Write(content); // Input
}
catch (Exception ex)
{
Console.Error.WriteLine($"[ERROR] Null content: {ex.GetType().Name} — {ex.Message}"); // Output
}
// Scenario 2: data exceeds QR capacity at the configured error correction level
try
{
var options = new QrOptions(QrErrorCorrectionLevel.Highest);
QrCode qr = QrWriter.Write(oversizedContent, options); // Input
}
catch (Exception ex)
{
Console.Error.WriteLine($"[ERROR] QR capacity exceeded: {ex.Message}"); // Output
Console.Error.WriteLine($" Input length: {oversizedContent.Length} chars");
Console.Error.WriteLine($" Action: Reduce content or lower error correction level");
}
ImportsIronQrDim content AsString = Nothing ' Nothing throws IronQrEncodingException Dim oversizedContent AsString = New String("A"c, 5000) ' 5,000 chars exceeds QR capacity at Highest error correction level ' Scenario 1: null inputTry Dim qr AsQrCode = QrWriter.Write(content) ' InputCatch ex AsExceptionConsole.Error.WriteLine($"[ERROR] Null content: {ex.GetType().Name} — {ex.Message}") ' OutputEndTry' Scenario 2: data exceeds QR capacity at the configured error correction levelTry Dim options As New QrOptions(QrErrorCorrectionLevel.Highest) Dim qr AsQrCode = QrWriter.Write(oversizedContent, options) ' InputCatch ex AsExceptionConsole.Error.WriteLine($"[ERROR] QR capacity exceeded: {ex.Message}") ' OutputConsole.Error.WriteLine($" Input length: {oversizedContent.Length} chars")Console.Error.WriteLine(" Action: Reduce content or lower error correction level")EndTry
Imports IronQr
Dim content As String = Nothing ' Nothing throws IronQrEncodingException
Dim oversizedContent As String = New String("A"c, 5000) ' 5,000 chars exceeds QR capacity at Highest error correction level
' Scenario 1: null input
Try
Dim qr As QrCode = QrWriter.Write(content) ' Input
Catch ex As Exception
Console.Error.WriteLine($"[ERROR] Null content: {ex.GetType().Name} — {ex.Message}") ' Output
End Try
' Scenario 2: data exceeds QR capacity at the configured error correction level
Try
Dim options As New QrOptions(QrErrorCorrectionLevel.Highest)
Dim qr As QrCode = QrWriter.Write(oversizedContent, options) ' Input
Catch ex As Exception
Console.Error.WriteLine($"[ERROR] QR capacity exceeded: {ex.Message}") ' Output
Console.Error.WriteLine($" Input length: {oversizedContent.Length} chars")
Console.Error.WriteLine(" Action: Reduce content or lower error correction level")
End Try
Ausgabe
Die Konsole zeigt den Ausnahmetyp und die Fehlermeldung für beide Fehlerszenarien an.
Protokollieren Sie die Eingabelänge zusammen mit der Fehlermeldung, um festzustellen, ob das Problem einen kürzeren Inhalt oder eine niedrigere Korrekturstufe erfordert. Um den Aufwand für Ausnahmen zu reduzieren und die Diagnose zu verbessern, sollten Benutzereingaben vor der Kodierung auf die Länge der Zeichenkette geprüft und auf Nullwerte untersucht werden.
Protokollierung von QR-Code-Operationen
Verwenden Sie IronSoftware.Logger, um interne Diagnosen zu erfassen. Implementieren Sie für jeden Lesevorgang eine Hilfsfunktion, die den Dateipfad, die Anzahl der Ergebnisse und die verstrichene Zeit als JSON protokolliert, um eine übersichtliche Ausgabe für den gesamten Batch zu gewährleisten.
Eingabe
Das Batch umfasst vier gültige QR-Code-Bilder von qr-scans/ und eine fünfte Datei, scan-05-broken.png, mit ungültigen Bytes.
Scan 1
Scan 2
Scan 3
Scan 4
using IronQr;using IronSoftware.Drawing;using System.Diagnostics;// Enable shared Iron Software logging for internal diagnosticsIronQr.Logging.Logger.LoggingMode = IronQr.Logging.Logger.LoggingModes.All;IronQr.Logging.Logger.LogFilePath = "ironqr-debug.log";// Reusable wrapper for structured observability(IEnumerable<QrResult> Results, boolSuccess, stringError) ReadQrWithDiagnostics(string filePath){ var sw = Stopwatch.StartNew(); try { var input = new QrImageInput(AnyBitmap.FromFile(filePath)); var results = new QrReader().Read(input).ToList(); sw.Stop();Console.WriteLine($"{{\"op\":\"qr_read\",\"file\":\"{Path.GetFileName(filePath)}\"," + $"\"status\":\"ok\",\"count\":{results.Count},\"ms\":{sw.ElapsedMilliseconds}}}"); return (results, true, null); } catch (Exception ex) { sw.Stop(); string error = $"{ex.GetType().Name}: {ex.Message}";Console.Error.WriteLine($"{{\"op\":\"qr_read\",\"file\":\"{Path.GetFileName(filePath)}\"," + $"\"status\":\"error\",\"exception\":\"{ex.GetType().Name}\"," + $"\"message\":\"{ex.Message}\",\"ms\":{sw.ElapsedMilliseconds}}}"); return (Enumerable.Empty<QrResult>(), false, error); }}// Usage: process a batch with per-file isolationstring[] files = Directory.GetFiles("qr-scans/", "*.png");int ok = 0, fail = 0;foreach (string file in files){ var (results, success, error) = ReadQrWithDiagnostics(file); if (success && results.Any()) ok++; else fail++;}Console.WriteLine($"\nBatch complete: {ok} success, {fail} failed/empty out of {files.Length} files");
using IronQr;
using IronSoftware.Drawing;
using System.Diagnostics;
// Enable shared Iron Software logging for internal diagnostics
IronQr.Logging.Logger.LoggingMode = IronQr.Logging.Logger.LoggingModes.All;
IronQr.Logging.Logger.LogFilePath = "ironqr-debug.log";
// Reusable wrapper for structured observability
(IEnumerable<QrResult> Results, bool Success, string Error) ReadQrWithDiagnostics(string filePath)
{
var sw = Stopwatch.StartNew();
try
{
var input = new QrImageInput(AnyBitmap.FromFile(filePath));
var results = new QrReader().Read(input).ToList();
sw.Stop();
Console.WriteLine($"{{\"op\":\"qr_read\",\"file\":\"{Path.GetFileName(filePath)}\","
+ $"\"status\":\"ok\",\"count\":{results.Count},\"ms\":{sw.ElapsedMilliseconds}}}");
return (results, true, null);
}
catch (Exception ex)
{
sw.Stop();
string error = $"{ex.GetType().Name}: {ex.Message}";
Console.Error.WriteLine($"{{\"op\":\"qr_read\",\"file\":\"{Path.GetFileName(filePath)}\","
+ $"\"status\":\"error\",\"exception\":\"{ex.GetType().Name}\","
+ $"\"message\":\"{ex.Message}\",\"ms\":{sw.ElapsedMilliseconds}}}");
return (Enumerable.Empty<QrResult>(), false, error);
}
}
// Usage: process a batch with per-file isolation
string[] files = Directory.GetFiles("qr-scans/", "*.png");
int ok = 0, fail = 0;
foreach (string file in files)
{
var (results, success, error) = ReadQrWithDiagnostics(file);
if (success && results.Any()) ok++;
else fail++;
}
Console.WriteLine($"\nBatch complete: {ok} success, {fail} failed/empty out of {files.Length} files");
C#
Ausgabe
Die Konsole zeigt JSON-Protokollzeilen für jede Datei an: vier erfolgreiche Lesevorgänge und einen strukturierten Fehlereintrag für die beschädigte Datei, gefolgt von der Batch-Zusammenfassung. IronSoftware.Logger schreibt interne Diagnosen gleichzeitig an IronQR-debug.log. Sie können das vollständige Debug-Protokoll hier herunterladen.
Die JSON-Ausgabe wird direkt in Log-Aggregationstools eingespeist: leiten Sie stdout an Fluentd, Datadog oder CloudWatch in einer containerisierten Bereitstellung weiter. Das ms-Feld zeigt Latenzregressionen auf, und das Debug-Protokoll erfasst interne Verarbeitungsschritte, die der Wrapper nicht aufzeichnet.
Wie kann ich QR-Code-Lese/Schreibvorgänge in C# debuggen?
Sie können QR-Code-Lese/Schreibvorgänge in C# mit IronQR debuggen, indem Sie Ausnahmen abfangen, Diagnosen protokollieren und Batch-Prozesse mit strukturierter Ausgabe überwachen.
Was soll ich tun, wenn ich einen Fehler bei der Verarbeitung von QR-Codes in C# erhalte?
Wenn Sie einen Fehler bei der Verarbeitung von QR-Codes in C# erhalten, verwenden Sie IronQR, um Ausnahmen abzufangen und zu behandeln. Dies ermöglicht es Ihnen, Probleme effektiv zu identifizieren und zu lösen.
Wie hilft IronQR bei der Überwachung der Batch-Verarbeitung von QR-Codes?
IronQR hilft bei der Überwachung der Batch-Verarbeitung von QR-Codes, indem es strukturierte Ausgaben bereitstellt, die bei der Identifikation und Behebung von Fehlern oder Ineffizienzen im Prozess helfen.
Kann IronQR Diagnosen für QR-Code-Vorgänge protokollieren?
Ja, IronQR kann Diagnosen für QR-Code-Vorgänge protokollieren, sodass Sie die Leistung und Fehler in Ihren C#-Anwendungen nachverfolgen und analysieren können.
Was sind die häufigen Ausnahmen bei der QR-Code-Verarbeitung mit IronQR?
Häufige Ausnahmen bei der QR-Code-Verarbeitung mit IronQR beinhalten Probleme mit nicht lesbaren QR-Codes und fehlerhafter Formatverarbeitung, die durch ordnungsgemäße Ausnahmebehandlung in Ihrem C#-Code verwaltet werden können.
How can I improve error detection during QR code processing with IronQR?
Improve error detection by implementing logging that captures detailed information on file paths, operation status, result counts, and execution time. This data supports easier debugging and system observability.
Can IronQR's logging output be integrated with log aggregation tools?
Yes, the JSON output from IronQR can be fed directly into log aggregation tools such as Fluentd, Datadog, or CloudWatch, making it suitable for containerized deployments and enhancing monitoring capabilities.
What approach does IronQR suggest for handling batch QR code operations?
IronQR recommends processing each file in isolation, logging the results for each read operation to help identify errors, and providing a complete batch summary that tallies successes and failures.
How does IronQR assist in diagnosing file-level failures during QR code scans?
IronQR detects file-level failures like IOException and FileNotFoundException, providing descriptive error messages which can be logged to pinpoint issues such as incorrect file paths or unreadable files.
Why is it important to wrap QR read/write calls in try-catch blocks?
Wrapping read/write operations in try-catch blocks ensures that failures do not crash the application, allowing you to handle exceptions gracefully, log necessary diagnostics, and guide the user with useful messages.
Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.