DOBON.NET DOBON.NETプログラミング掲示板過去ログ

windowsAPIのエラーに関して

環境/言語:[C#、windowsXP、VS.NET2005]
分類:[.NET]

たびたび質問すみません。
C#のプログラムに関してなのですが、
前に、タイトルの「windowsAPIのFtpCreateDirectory」で質問をさしていただいて、
windowsAPIが少しづつ分かってきたのですが、
エラー処理をどうすればいいか?迷っています。
前に質問をさしていただいたさい、FTPサーバーのエラーレスポンスは
「http://www.atmarkit.co.jp/fnetwork/rensai/netpro10/ftp-responsecode.html

ここが、参考にしやすいと教えていただいたのですが、windowsAPIのエラーって凄く多いですよね?
このエラーコードは全て判別出来るように、拾わないといけないものなのでしょうか?
例えば、下記のホームページのように、全てエラーコードを記述するのが、
一般的なのでしょうか?
(それに対するエラーメッセージを返すという方法)
「http://www.cnet-sc.ne.jp/hiraga/DLL/IConnect/IConSub.cpp」

あるいは、エラーコードが0とそれ以外というやり方ではまずいものなのでしょうか?
「仕様によります」という答えをもらってしまいそうですが、
何かアドバイスいただけたら光栄です。
今は、0とそれ以外という形を取っています。
0はOK
0以外はエラー(127は除く)
> あるいは、エラーコードが0とそれ以外というやり方ではまずいものなのでしょうか?
> 「仕様によります」という答えをもらってしまいそうですが、
> 何かアドバイスいただけたら光栄です。

確かにものによります。
今そんな処理あるのか?という例ですが、
フロッピーにあるファイルをオープンする処理の場合
フロッピーそのものが挿してあるかないかを検知する必要があり、
DEVICE_NOT_READY(スペルは適当)に対して「フロッピーを挿入してください」と表示する必要があったりします。
やはり呼び出す関数によってトラップすべきエラーコードは考慮する必要があるでしょう。
返すエラーはPlatformSDKの該当関数のページを見れば書いてあるので
Windowsに存在するエラーすべてを覚える必要は無いでしょう。
2007/04/09(Mon) 16:33:31 編集(投稿者)

> あるいは、エラーコードが0とそれ以外というやり方ではまずいものなのでしょうか?
> 「仕様によります」という答えをもらってしまいそうですが、

やはり仕様によります。
ただ、ユーザに何をしてもらう必要があるか?を考えれば目安になるかと思います。

> 何かアドバイスいただけたら光栄です。
> 今は、0とそれ以外という形を取っています。
> 0はOK
> 0以外はエラー(127は除く)

エラーが発生した場合はユーザはどうすればよいのでしょうか?
それにより自ずと決まるのではありませんか?

例えば、認証時にエラーが発生しているなら、
ユーザIDかパスワードが間違っているから確認してね、
という情報を提供してあげるべきでしょう。

ユーザがどう対処したらいいかを示すために必要なだけ
エラーを区別できていればOKだと思います。

※タイプミス修正
#設計という点から。

たとえばラッピングした関数を作ってそれがTrue/Falseしか返さない仕様だった場合
呼び出し側は成功/失敗しか知ることができず、よねKENさんの言われるようなユーザーへの応答もできなくなります。
なので外側の目的のみを考慮すると身動きが取れなくなります。
設計という点からはそこら辺も含めてどのエラーを検知する必要があるかを考えたほうがよいでしょう。
みなさんアドバイスありがとうございました。
本当に勉強になりました。
一応、報告なのですが、質問でもしかしたら内容がうまく伝わっていなかったかもしれないと思ったので、書かしていただきます。
私はよくエラーコードをどう対応するか分かっていなかったので、
「http://www.cnet-sc.ne.jp/hiraga/DLL/IConnect/IConSub.cpp」
ここを見て、必要なエラーコードをだいたいピックアップし、
プログラムに直接、switchで
このエラーコードの時は、このエラーメッセージという風に書いていました。
しかし、勉強していくと、FormatMessageの存在をしりました。
今はこれを使用しています。
よって、なぜ今回の質問になったかというと、FormatMessageの存在を知らなかったからです。
>windowsAPIのエラーって凄く多いですよね?
みたいな質問になってしまったのです。
本当に今回はみなさんありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板