C#'de QR Kod Hata Mesajlarını Nasıl Yönetirim?

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

IronQR'nin hata yönetimi, okuma ve yazma hatalarını yakalamanıza, tanı koyma kayıtlarını almanıza ve her taramadan net sonuçlar elde etmenize yardımcı olur. Açık kontroller eklemezseniz, hem boş bir sonuç hem de bozuk bir dosya hiçbir şey döndürmeyecek ve yanlış gidenin ne olduğunu bilemeyeceksiniz. Hedeflenmiş istisna yönetimi ve tanı koyma kaydı ekleyerek, sessiz hataları faydalı geri bildirimlere dönüştürebilirsiniz. Bu kılavuz, boş sonuçları nasıl yöneteceğinizi, yazma zamanında oluşan istisnaları nasıl yöneteceğinizi ve toplu işlem için yapılandırılmış bir kayıt sarmalayıcısı nasıl oluşturacağınızı açıklar.

Hızlı Başlangıç: QR Kod Hatalarını Yönetin

QR okuma işlemlerini bir try-catch bloğu içine alın ve dosya ve kod çözme hataları için tanılama bilgilerini günlüğe kaydedin.

  1. IronQR aşağıdaki NuGet Paket Yöneticisi ile yükleyin

    PM > Install-Package IronQR
  2. Bu kod parçacığını kopyalayın ve çalıştırın.

    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. Canlı ortamınızda test için dağıtım yapın

    Ücretsiz deneme ile bugün projenizde IronQR kullanmaya başlayın

    arrow pointer

Okuma Hatalarını ve Boş Sonuçları Yönetme

Tanı koyma kaydı olmadan, boş bir sonuç ve bozuk bir dosya çağıran kişiye aynı şekilde görünür. Aşağıdaki örnek, dosya erişim hatalarını algılar ve tarama sonuç döndürmezse uyarı verir.

Giriş

Bu QR örneği girişi diskte mevcuttur. Kullanıcının dosyayı alıp kod çözdüğü ve dosya yolunun yanlış olduğu senaryoları simüle edeceğiz.

https://ironsoftware.com/qr/scan-1 adresini kodlayan geçerli QR kod girişi
: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

Çıktı

Başarılı bir QR kod okuması için terminal çıkışı [QRCode] https://ironsoftware.com/qr/scan-1 gösteriyor

Lütfen dikkate alınBaşarılı bir okuma sadece QR kod değerini döndürecek, ancak çalışma sırasında bir hata oluşursa, aşağıda gösterilen istisna mesajı veya uyarıları gösterecektir.

Aşağıdaki konsolda, boş sonuç durumu için [WARN] ve eksik dosya durumu için [ERROR] gösterilmektedir; her biri için dosya yolu ve önerilen eylem de belirtilmiştir.

Damaged-scan.png içinde QR kodu bulunamadığı için WARN ve eksik-label.png için dosya bulunamadığı için HATA gösteren terminal çıkışı

Yazma Hatalarını Yönetme

null'yi QrWriter.Write'ye aktarmak, bir IronQrEncodingException'yi tetikler. Konfigüre edilmiş hata düzeltme seviyesi için kapasiteyi aşan veriler de atar, çünkü daha yüksek düzeltme seviyeleri mevcut veri kapasitesini azaltır.

Giriş

Aşağıdaki iki girdi değişkeni, hata senaryolarını tanımlar: nullContent, null'dir ve oversizedContent, en yüksek düzeltme seviyesinde QR kapasitesini aşan 5.000 karakterlik bir dizedir.

: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

Çıktı

Konsol her iki hata senaryosu için istisna türünü ve mesajını gösterir.

Null içerik QrWriter.Write'a geçtiğinde IronQrEncodingException gösteren terminal çıkışı

Girdi uzunluğunu, içerik kısaltılması veya daha düşük bir düzeltme seviyesi gerekip gerekmediğini belirlemek için istisna mesajıyla günlükleyin. Kullanıcı girdisi için, istisna yükünü azaltmak ve tanı koymayı geliştirmek amacıyla kodlamadan önce dizge uzunluğunu doğrulayın ve null değerleri kontrol edin.


QR Kod İşlemlerini Kayıt Altına Alma

Dahili tanılama bilgilerini yakalamak için IronSoftware.Logger kullanın. Her okuma işlemi için, dosya yolu, sonuç sayısı ve geçen zamanı JSON olarak kaydeden bir yardımcı fonksiyon uygulayarak tüm toplu işlem için net bir çıktı sağlayın.

Giriş

Toplu iş, qr-scans/ adresinden alınan dört geçerli QR kodu görüntüsü ve geçersiz baytlar içeren beşinci bir dosya olan scan-05-broken.png'yi içerir.

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

Çıktı

Konsol, her dosya için JSON günlük satırlarını gösterir: dört başarılı okuma ve kırık dosya için bir yapılandırılmış hata girişi, ardından toplu işlem özetini. IronSoftware.Logger aynı anda IronQR-debug.log dosyasına dahili tanılama bilgilerini yazar. Tam hata ayıklama günlüğünü buradan indirebilirsiniz.

4 başarılı okuma ve 1 hatayı gösteren JSON yapılandırılmış günlük satırları ve toplu işlem tamamlanma özeti gösteren terminal çıkışı

JSON çıktısı, günlük toplama araçlarına doğrudan beslenir: konteyner tabanlı bir dağıtımda stdout'yi Fluentd, Datadog veya CloudWatch'a yönlendirin. ms alanı gecikme gerilemelerini ortaya çıkarır ve hata ayıklama günlüğü, sarmalayıcının yakalamadığı dahili işleme adımlarını yakalar.


Daha Fazla Okuma

Üretime hazır olduğunuzda lisanslama seçeneklerini görüntüleyin.

Tam DetailedErrorMessagesTest konsol uygulama projesini indirmek için buraya tıklayın.

Sıkça Sorulan Sorular

C#'de QR kodu okuma/yazma işlemlerini nasıl hata ayıklayabilirim?

IronQR kullanarak C#'de QR kodu okuma/yazma işlemlerini hata ayıklayabilirsiniz, istisnaları yakalayarak, tanılamaları kaydederek ve yapılandırılmış çıktı ile toplu işlem izleyerek.

QR kodlarını C#'de işlerken bir hata ile karşılaşırsam ne yapmalıyım?

C#'de QR kodlarını işlerken bir hata ile karşılaşırsanız, IronQR kullanarak istisnaları yakalayın ve yönetin. Bu, sorunları etkili bir şekilde tanımlamanıza ve çözmenize olanak tanır.

IronQR, QR kodu toplu işlemlerini izlemeye nasıl yardımcı olur?

IronQR, QR kodu toplu işlemlerini izlemek için yapılandırılmış çıktı sağlayarak, süreç sırasında herhangi bir hata veya verimsizlik durumunu tanımlamanıza ve çözmenize yardımcı olur.

IronQR, QR kodu işlemleri için tanılamaları kaydedebilir mi?

Evet, IronQR, C# uygulamalarınızdaki performansı ve hataları izlemek ve analiz etmek için QR kodu işlemleri için tanılamaları kaydedebilir.

IronQR ile QR kodu işlemede yaygın istisnalar nelerdir?

IronQR ile QR kodu işlemede yaygın istisnalar, okunamayan QR kodları ve yanlış format yönetimiyle ilgili sorunları içerir ve bu sorunlar C# kodunuzda doğru istisna yönetimi ile yönetilebilir.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 67,270 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronQR
bir örnek çalıştırın url'nizin bir QR koda dönüşmesini izleyin.