私は現在のユーザーのディスククォータを超過しようとして失敗したことを示すEDQUOTエラーの発生を検出するUNIXからWindowsへのC++コードを移植しています。 Visual Studioの<errno.h>にはEDQUOTがありませんが、Windowsにはディスククォータ機能が備わっています。 Visual Studioの<errno.h> にはENOSPCがあります。これは、UNIXがEDQUOTとしてどのように表現するかをCRTがどのように表しているかを示しています。誰でもこの理論を確認したり拒否できますか?そして、これがこれを処理する方法でないなら、何がありますか?EDQUOTに相当するWindowsはありますか?
2
A
答えて
2
C:\プログラムファイル\マイクロソフトのSDK \ Windowsの\ v7.0A \は\ WINSOCK.H
C含める:の\ Program Files \ MicrosoftのSDK \ WINDOWS \ V7.1の\ \ WINSOCK.H
を含めると#if 0
#define EDQUOT WSAEDQUOT
#endif
C:\プログラムファイル\マイクロソフトのSDK \ Windowsの\のV7.1の\ \ WINERROR.H
を含める:の\ Program Files \ MicrosoftのSDK \ Windowsの\ v7.0A \は\ WINERROR.HCインクルード
//
// MessageId: WSAEDQUOT
//
// MessageText:
//
// Ran out of disk quota.
//
#define WSAEDQUOT 10069L
ランタイムライブラリのソースはENOSPCが正確に1つの場所で生成されていることを示しています。 WindowsシステムコールWriteFileがバイトの書き込みに失敗した場合、3つのブランチのいずれかが発生します。 –
Win32エラーがあった場合は、マップされて返されます。あなたはNT_STATUS_QUOTA_EXCEEDEDがEDQUOTにマップされることを期待するかもしれません。まったく問題になるかもしれませんが、そうではありません。 2番目のブランチはデバイスに関するもので、無視することができます。 3番目のブランチは他のすべてで、ENOSPCを生成します。 –
上記のNT_STATUS_QUOTA_EXCEEDEDについてのコメントは無視してください。これは、Win32エラーコードではなく、カーネルエラーコードでなければなりません。 Win32レベルでは、すべての種類のクォータ関連のエラーコードがあります。どの状況下で表示されるのかを確認するためのコードを書く必要があるので、CRTにどのような影響があるか把握することができます。私が心配していることの1つは、CRTはディスククォータエラーを何かにマッピングするようには見えず、EINVALに落ちるということです。 –