2009-05-01 3 views
2

Я портирую код C++ из UNIX в Windows, который обнаруживает возникновение ошибки EDQUOT, что указывает на неудачную попытку превысить квоту диска текущего пользователя. Visual Studio's <errno.h> не имеет EDQUOT, хотя я знаю, что Windows имеет функциональность дисковой квоты. Visual Studio's <errno.h> У есть ENOSPC, что может быть как CRT выражает то, что UNIX будет выражать как EDQUOT. Может ли кто-нибудь подтвердить или опровергнуть эту теорию? И если это не способ справиться с этим, что это?Есть ли Windows эквивалент EDQUOT?

+0

Источники библиотеки времени исполнения показывают, что ENOSPC производится ровно в одном месте, что неудивительно в «write». Если системный вызов Windows WriteFile не может записать никаких байтов, произойдет одно из трех ветвей. –

+0

Если произошла ошибка Win32, она отображается и возвращается. Вы могли бы ожидать, что NT_STATUS_QUOTA_EXCEEDED будет отображаться на EDQUOT, или, если на то пошло, вообще ничего, но это не так. Вторая ветка относится к устройствам и может быть проигнорирована. Третья ветка - это все остальное, что производит ENOSPC. –

+0

Просьба проигнорировать мой комментарий выше о NT_STATUS_QUOTA_EXCEEDED; это должен быть код ошибки ядра, а не код ошибки Win32. На уровне Win32 есть все типы кодов ошибок, связанных с квотами, и я боюсь, что мне придется писать код, чтобы узнать, какая из них появляется при каких обстоятельствах, поэтому я могу выяснить, какое влияние они могут оказать на ЭЛТ , Меня беспокоит то, что CRT, похоже, не отображает никаких ошибок квот на все что-либо и возвращается к EINVAL. –

ответ

2

C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ Include \ winsock.h

C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Include \ winsock.h

#if 0 
#define EDQUOT     WSAEDQUOT 
#endif 

C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ Include \ WinError.h

C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Include \ WinError.h

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