Wie man QR-Code-Fehlermeldungen in C# behandelt

This article was translated from English: Does it need improvement?
Translated
View the article in English

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

QR-Lesevorgänge in einen try-catch-Block einbetten und Diagnosedaten für Datei- und Dekodierungsfehler protokollieren.

  1. Installieren Sie IronQR mit NuGet Package Manager

    PM > Install-Package IronQR
  2. Kopieren 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}");
    }
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronQR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer

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.

Gültige QR-Code-Eingabekodierung https://ironsoftware.com/qr/scan-1
:path=/static-assets/qr/content-code-examples/how-to/detailed-error-messages/read-diagnostics.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}");
}
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
$vbLabelText   $csharpLabel

Ausgabe

Die Terminalausgabe zeigt [QRCode] https://ironsoftware.com/qr/scan-1 für ein erfolgreiches Einlesen des QR-Codes an.

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 untenstehende Konsole zeigt ein [WARN] für den Fall eines leeren Ergebnisses und ein [ERROR] für die fehlende Datei, jeweils mit dem Dateipfad und einer empfohlenen Maßnahme.

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.

Behandlung von Schreibfehlern

Die Übergabe 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 eine Zeichenfolge mit 5.000 Zeichen, die die QR-Kapazität bei der höchsten Korrekturstufe überschreitet.

:path=/static-assets/qr/content-code-examples/how-to/detailed-error-messages/write-diagnostics.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");
}
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
$vbLabelText   $csharpLabel

Ausgabe

Die Konsole zeigt den Ausnahmetyp und die Fehlermeldung für beide Fehlerszenarien an.

Terminalausgabe mit Meldung über eine IronQrEncodingException für Null-Inhalte, die an QrWriter.Write übergeben wurden.

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 Diagnosedaten 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

Der Stapel enthält vier gültige QR-Code-Bilder aus qr-scans/ und eine fünfte Datei, scan-05-broken.png, mit ungültigen Bytes.

QR code encoding https://ironsoftware.com/qr/scan-1
QR code encoding https://ironsoftware.com/qr/scan-2
QR code encoding https://ironsoftware.com/qr/scan-3
QR code encoding https://ironsoftware.com/qr/scan-4
:path=/static-assets/qr/content-code-examples/how-to/detailed-error-messages/logging-wrapper.cs
using IronQr;
using IronSoftware.Drawing;
using System.Diagnostics;

// Enable shared Iron Software logging for internal diagnostics
IronSoftware.Logger.LoggingMode = IronSoftware.Logger.LoggingModes.All;
IronSoftware.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");
Imports IronQr
Imports IronSoftware.Drawing
Imports System.Diagnostics
Imports System.IO
Imports System.Linq

' Enable shared Iron Software logging for internal diagnostics
IronSoftware.Logger.LoggingMode = IronSoftware.Logger.LoggingModes.All
IronSoftware.Logger.LogFilePath = "ironqr-debug.log"

' Reusable wrapper for structured observability
Private Function ReadQrWithDiagnostics(ByVal filePath As String) As (IEnumerable(Of QrResult), Boolean, String)
    Dim sw = Stopwatch.StartNew()
    Try
        Dim input = New QrImageInput(AnyBitmap.FromFile(filePath))
        Dim 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, Nothing)
    Catch ex As Exception
        sw.Stop()
        Dim error As String = $"{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(Of QrResult)(), False, error)
    End Try
End Function

' Usage: process a batch with per-file isolation
Dim files As String() = Directory.GetFiles("qr-scans/", "*.png")
Dim ok As Integer = 0, fail As Integer = 0

For Each file As String In files
    Dim result = ReadQrWithDiagnostics(file)
    Dim results = result.Item1
    Dim success = result.Item2
    Dim error = result.Item3

    If success AndAlso results.Any() Then
        ok += 1
    Else
        fail += 1
    End If
Next

Console.WriteLine($"\nBatch complete: {ok} success, {fail} failed/empty out of {files.Length} files")
$vbLabelText   $csharpLabel

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 gleichzeitig interne Diagnosedaten in IronQR-debug.log. Das vollständige Debug-Protokoll können Sie hier herunterladen.

Terminalausgabe mit JSON-strukturierten Protokollzeilen für 4 erfolgreiche Lesevorgänge und 1 Fehler Plus einer Zusammenfassung des abgeschlossenen Batches.

Die JSON-Ausgabe wird direkt in Log-Aggregation-Tools eingespeist: Leiten Sie stdout in einer containerisierten Bereitstellung an Fluentd, Datadog oder CloudWatch weiter. Das Feld ms zeigt Latenzregressionen an, und das Debug-Protokoll erfasst interne Verarbeitungsschritte, die der Wrapper nicht erfasst.


Weiterführende Literatur

Sehen Sie sich die Lizenzoptionen an, wenn Sie bereit für die Produktion sind.

Klicken Sie hier, um das vollständige Konsolenanwendungsprojekt DetailedErrorMessagesTest herunterzuladen .

Häufig gestellte Fragen

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.

Curtis Chau
Technischer Autor

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 ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 67,270 | Version: 2026.5 just released
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronQR
Führen Sie ein Beispiel aus und beobachten Sie, wie Ihre URL zu einem QR-Code wird.