4

私は、Windows、Linux、および Mac のファイル IO 呼び出しをマクロに抽象化して遊んでいます (C ランタイムを回避するためfopenfclose. 私は実際にはかなりの作業をしていますが、つまずきのブロックに遭遇しました。

これらの各プラットフォームによってスローされる可能性のあるすべてのエラーを、一般的なエラーのサブセットに要約しようとしています: Not Found、Exists、Invalid Access など。

Linux は明らかに十分に文書化されており、Mac にも最も一般的なものがありますが、Windows はネイティブのファイル I/O 関数に対してどのエラーがスローされるかを指定していません。明らかに を使用する必要がありGetLastError()ますが、可能な値がどうなるかについての参照が見つかりませんでした。

これはどう?

Windows アプリケーションを作成し、CreatFile()API を使用しています。できる限り適切にエラーを処理し、ユーザーに「クラップ! できない」と伝える代わりに、エラーから回復したいと考えています。ただし、MSDN のドキュメントには、生成される可能性のあるエラー コードが記載されていません。

特に(今のところ)Windowsファイル機能が生成する可能性のあるエラーコードへの参照を持っている人はいますCreateFile()か?

4

2 に答える 2

8

Windows は、インストール可能なファイル システムをサポートしています。Microsoft は、サード パーティのファイル システム ドライバーが生成するエラーの種類を予測できない可能性があるため、考えられるエラー コードの厳密なサブセットを約束しようとはしません。

はい、本当に GetLastError() を使用する必要があります。FormatMessage() 関数を使用して、エラー コードの読み取り可能な文字列を生成できます。一般に、ユーザーは根本的な原因を診断するのに役立つ適切なエラー メッセージを受け取ります。チリで発生した地震で海底通信ケーブルが切断されたとは言い切れませんが、ネットワークの問題などを調べるのに役立つことは間違いありません。CRT ラッパーも使用できますが、必然的に特異性が失われます。それは、ユーザーの IT スタッフではなく、あなたが処理しなければならないサービス コールである可能性があります。

于 2013-10-08T14:07:45.537 に答える