2009-05-01 16 views
2

私は現在のユーザーのディスククォータを超過しようとして失敗したことを示すEDQUOTエラーの発生を検出するUNIXからWindowsへのC++コードを移植しています。 Visual Studioの<errno.h>にはEDQUOTがありませんが、Windowsにはディスククォータ機能が備わっています。 Visual Studioの<errno.h> にはENOSPCがあります。これは、UNIXがEDQUOTとしてどのように表現するかをCRTがどのように表しているかを示しています。誰でもこの理論を確認したり拒否できますか?そして、これがこれを処理する方法でないなら、何がありますか?EDQUOTに相当するWindowsはありますか?

+0

ランタイムライブラリのソースはENOSPCが正確に1つの場所で生成されていることを示しています。 WindowsシステムコールWriteFileがバイトの書き込みに失敗した場合、3つのブランチのいずれかが発生します。 –

+0

Win32エラーがあった場合は、マップされて返されます。あなたはNT_STATUS_QUOTA_EXCEEDEDがEDQUOTにマップされることを期待するかもしれません。まったく問題になるかもしれませんが、そうではありません。 2番目のブランチはデバイスに関するもので、無視することができます。 3番目のブランチは他のすべてで、ENOSPCを生成します。 –

+0

上記のNT_STATUS_QUOTA_EXCEEDEDについてのコメントは無視してください。これは、Win32エラーコードではなく、カーネルエラーコードでなければなりません。 Win32レベルでは、すべての種類のクォータ関連のエラーコードがあります。どの状況下で表示されるのかを確認するためのコードを書く必要があるので、CRTにどのような影響があるか把握することができます。私が心配していることの1つは、CRTはディスククォータエラーを何かにマッピングするようには見えず、EINVALに落ちるということです。 –

答えて

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.H

Cインクルード

// 
// MessageId: WSAEDQUOT 
// 
// MessageText: 
// 
// Ran out of disk quota. 
// 
#define WSAEDQUOT      10069L