【问题标题】:Is there a Windows equivalent of EDQUOT?是否有相当于 EDQUOT 的 Windows 版本?
【发布时间】:2009-05-01 18:57:33
【问题描述】:

我正在将一些 C++ 代码从 UNIX 移植到 Windows,它检测到 EDQUOT 错误的发生,这表明尝试超过当前用户的磁盘配额失败。 Visual Studio 的 没有 EDQUOT,尽管我知道 Windows 具有磁盘配额功能。 Visual Studio 的 确实 有一个 ENOSPC,这可能是 CRT 表达 UNIX 将表达为 EDQUOT 的方式。任何人都可以证实或否认这个理论吗?如果这不是处理这个问题的方法,那是什么?

【问题讨论】:

  • 运行时库源代码显示 ENOSPC 仅在一个地方生成,不出所料的是“写入”。如果 Windows 系统调用 WriteFile 未能写入任何字节,则会发生三个分支之一。
  • 如果出现 Win32 错误,则映射并返回。您可能希望 NT_STATUS_QUOTA_EXCEEDED 映射到 EDQUOT,或者根本就没有映射到任何东西,但事实并非如此。第二个分支是关于设备的,可以忽略。第三个分支是其他一切,它产生 ENOSPC。
  • 请忽略我上面关于 NT_STATUS_QUOTA_EXCEEDED 的评论;那必须是内核错误代码,而不是 Win32 错误代码。 Win32级别有各种与配额相关的错误代码,恐怕我得写代码看看它们在什么情况下出现,这样我才能弄清楚它们对CRT可能有什么影响.让我担心的一件事是,CRT 似乎没有将任何磁盘配额错误映射到任何东西上,而是退回到 EINVAL。

标签: visual-studio visual-studio-2005 msvcrt errno


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多