Я портирую код C++ из UNIX в Windows, который обнаруживает возникновение ошибки EDQUOT, что указывает на неудачную попытку превысить квоту диска текущего пользователя. Visual Studio's <errno.h> не имеет EDQUOT, хотя я знаю, что Windows имеет функциональность дисковой квоты. Visual Studio's <errno.h> У есть ENOSPC, что может быть как CRT выражает то, что UNIX будет выражать как EDQUOT. Может ли кто-нибудь подтвердить или опровергнуть эту теорию? И если это не способ справиться с этим, что это?Есть ли Windows эквивалент EDQUOT?
2
A
ответ
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
Источники библиотеки времени исполнения показывают, что ENOSPC производится ровно в одном месте, что неудивительно в «write». Если системный вызов Windows WriteFile не может записать никаких байтов, произойдет одно из трех ветвей. –
Если произошла ошибка Win32, она отображается и возвращается. Вы могли бы ожидать, что NT_STATUS_QUOTA_EXCEEDED будет отображаться на EDQUOT, или, если на то пошло, вообще ничего, но это не так. Вторая ветка относится к устройствам и может быть проигнорирована. Третья ветка - это все остальное, что производит ENOSPC. –
Просьба проигнорировать мой комментарий выше о NT_STATUS_QUOTA_EXCEEDED; это должен быть код ошибки ядра, а не код ошибки Win32. На уровне Win32 есть все типы кодов ошибок, связанных с квотами, и я боюсь, что мне придется писать код, чтобы узнать, какая из них появляется при каких обстоятельствах, поэтому я могу выяснить, какое влияние они могут оказать на ЭЛТ , Меня беспокоит то, что CRT, похоже, не отображает никаких ошибок квот на все что-либо и возвращается к EINVAL. –