IronQR ハウツー 詳細なエラーメッセージとデバッグ C#でQRコードのエラーメッセージを処理する方法 カーティス・チャウ 更新日:2026年3月5日 IronQR をダウンロード NuGet ダウンロード 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る This article was translated from English: Does it need improvement? Translated View the article in English IronQRのエラー処理機能は、読み取りおよび書き込みの失敗を検知し、診断ログを出力し、すべてのスキャンから明確な結果を得るのに役立ちます。 明示的なチェックを追加しない場合、空の結果と破損したファイルの両方とも何も返さないため、何が問題だったのかがわかりません。 的を絞った例外処理と診断ログを追加することで、サイレントエラーを有用なフィードバックに変えることができます。 このガイドでは、空の結果を処理する方法、書き込み時の例外を管理する方法、およびバッチ処理用の構造化ログラッパーを構築する方法について説明します。 クイックスタート: QR コードエラーの処理 QR読み取り操作をtry-catchブロックで包み、ファイルとデコードの失敗の診断情報をログに記録します。 IronQR をNuGetパッケージマネージャでインストール PM > Install-Package IronQR このコード スニペットをコピーして実行します。 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}"); } 実際の環境でテストするためにデプロイする 今日プロジェクトで IronQR を使い始めましょう無料トライアル Free 30 Day Trial 最小限のワークフロー(5ステップ) QRコードのエラーハンドリングのためのIronQR C#ライブラリをダウンロードする QR読み取り/書き込みコールをtry-catchブロックで包む IOExceptionとArgumentExceptionを特定の失敗のためにキャッチする 空の結果と例外の診断をログに記録する パイプラインの可観測性のために構造化されたJSONログを使用する 読み取りエラーと空の結果の処理 ログ記録がない場合、呼び出し元にとっては、空の結果と破損したファイルは同じように見える。 以下の例は、ファイルアクセスエラーを検出し、スキャンで結果が返されない場合は警告を発します。 入力 このQRコードの入力例はディスク上に存在します。 ユーザーがファイルを取得してデコードする場合と、ファイルパスが間違っている場合の2つのシナリオをシミュレーションします。 :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 出力 ご注意読み取りが成功した場合はQRコード値が返されますが、実行時にエラーが発生した場合は、以下に示す例外メッセージまたは警告が表示されます。 以下のコンソールには、結果が空の場合には [WARN]、ファイルが見つからない場合には [ERROR] が表示され、それぞれについてファイルパスと推奨される対処法が示されています。 書き込みエラーの処理 null を QrWriter.Write に渡すと、IronQrEncodingException がトリガーされます。 設定されたエラー訂正レベルの容量を超えるデータもエラーになります。これは、訂正レベルが高くなると、利用可能なデータ容量が減少するためです。 入力 以下の2つの入力変数が障害シナリオを定義します:oversizedContentは、最高レベルの訂正能力でもQRコードの容量を超える5,000文字の文字列です。 :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 出力 コンソールには、両方の失敗シナリオにおける例外の種類とメッセージが表示されます。 例外メッセージとともに入力長さを記録し、問題がコンテンツの短縮または修正レベルの引き下げを必要とするかどうかを特定します。 ユーザー入力の場合、例外処理のオーバーヘッドを削減し、診断を改善するために、エンコード前に文字列の長さを検証し、null値をチェックしてください。 QRコード操作のログ記録 内部診断情報を取得するには IronSoftware.Logger を使用してください。 各読み取り操作ごとに、ファイルパス、結果数、経過時間をJSON形式でログに記録するヘルパー関数を実装し、バッチ全体の出力が明確になるようにします。 入力 このバッチには、qr-scans/ からの有効な QR コード画像 4 枚と、無効なバイトを含む 5 番目のファイル scan-05-broken.png が含まれています。 スキャン1 スキャン2 スキャン3 スキャン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 出力 コンソールには、各ファイルに関するJSONログ行が表示されます。正常に読み取れた4行と、破損したファイルに関する構造化エラーエントリが1行、そしてバッチの概要が表示されます。 IronSoftware.Logger は、同時に IronQR-debug.log に内部診断情報を書き込みます。完全なデバッグログはこちらからダウンロードできます。 出力されるJSONは、ログ集約ツールに直接取り込まれます。コンテナ化された環境では、stdoutをFluentd、Datadog、またはCloudWatchにパイプで転送します。 ms フィールドはレイテンシの悪化を可視化し、デバッグログはラッパーでは捕捉されない内部処理ステップを記録します。 さらなる読み物 -エラー訂正レベル:エンコードレベルでQRコードの耐性を調整します。 QRコードの読み取り方法:最初から最後までの読み取り手順。 QRコード生成チュートリアル:スタイルとロゴを使用した生成。 QrReader APIリファレンス:メソッドのシグネチャと注釈。 QrWriter API リファレンス:すべての書き込みオーバーロード。 制作準備が整ったら、ライセンスオプションをご確認ください。 完全なDetailedErrorMessagesTestコンソールアプリプロジェクトをダウンロードするには、こちらをクリックしてください。 カーティス・チャウ 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 準備はできましたか? Nuget ダウンロード 63,625 | バージョン: 2026.4 リリース 無料トライアル NuGet 無料ダウンロード 総ダウンロード数: 63,625 ライセンスを見る まだスクロールしていますか? すぐに証拠が欲しいですか? PM > Install-Package IronQR サンプルを実行する URL が QR コードになるのを見る。 NuGet 無料ダウンロード 総ダウンロード数: 63,625 ライセンスを見る