【问题标题】:c++ - _mkdir giving false errors windowsc++ - _mkdir 给出错误错误窗口
【发布时间】:2016-09-10 20:59:59
【问题描述】:

您好,我正在尝试使用此代码在 windows 中创建一个目录

标题

#include <direct.h>

脚本

int main() {
    string local = "C:/Program Files (x86)/Mail";   

    try
    {
        _mkdir (local.c_str ());
        cout << "It is made?";
    }

    catch(invalid_argument& e)
    {
        cout << e.what () << " " << (char*) EEXIST;
        if (e.what () == (char*) EEXIST) {
            cout << e.what () << " " << (char*) EEXIST;
        }
        return;
    }
}

文件显然没有制作,但也没有制作the error it should.

【问题讨论】:

  • 你忽略了返回值。
  • 我知道我没有权限,但我遇到的问题是该文件没有制作,但没有被捕获。还有@tkausl,你是在说捕捞结束的时候吗?我试图将返回值设置为 -1,但我得到“返回值类型与函数类型不匹配”我应该设置另一个值吗? (我很清楚尝试/抓住)
  • 哦,是的,主要的,我有点从另一个函数中抓取代码并将其插入到主要的这个问题中......忘记适当地放置返回。

标签: c++ error-handling mkdir errno


【解决方案1】:

_mkdir 不会抛出异常。 (这不是python或boost,也不是任何智能中间件)

阅读您所指的文档:它返回一个值。 0为OK,-1:错误,问为什么要errno

不要忽略返回值。如果没有 UAC 提升,您可能没有足够的权限来创建目录。

【讨论】:

  • Mmmhhh 我对此还不是很清楚。该文档说“发生错误时,该函数返回 –1 并按如下方式设置 errno。”那么我将如何检查errno?当我返回 -1(如果这是你的意思的返回值)时,我在 catch 上遇到错误。我想我应该说 catch 中的 cout 永远不会运行,只有 try 中的那个是。
【解决方案2】:

所以我终于弄清楚了 errno,对于 errno,你需要标题(至少在 Windows 上)errno codes的完整列表。

如果你想看看某个东西正在通过什么 errno 代码,可以说

if (
    _mkdir(((string)"C:/Program Files (x86)/Mail").c_str()) == 0 ||
    errno == 17 /* this is the code for - File exists - */
){
    // Do stuff

} else {
    int errorCode = errno; // You need to save the code before anything else,
                           //    becuase something else might change its value
    cout << errorCode;
}

这适用于 Windows,我不确定是否有一个可用于两者的库(如果有人知道请分享)。

不重要/咆哮-

我在 Linux 文档/用户对这些事情的解释中注意到的一件事是,一切都变得复杂。我的意思是,是的,我们都对你除了计算机科学专业的人知道的单词知识印象深刻,但显然有更简单的方法来解释事物,就像 freecodecamp 或 kahn 学院一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多