| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2738 人关注过本帖
标题:使用 fopen_s 后,若出现打开错误,怎么把 err 所储存的错误信息打印出来呢 ...
只看楼主 加入收藏
wangjiang624
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-11-3
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:9 
使用 fopen_s 后,若出现打开错误,怎么把 err 所储存的错误信息打印出来呢??
err=fopen_s(&fp,"D:\\wangjiang.txt", "r");
打开失败,想输出err存储的错误信息怎么半??
搜索更多相关主题的帖子: 信息 
2014-11-03 21:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
返回的这个就是Windows错误码,可以通过查表得到对应的意义。Win32 API也有内部函数可以返回文字信息,我以前发过代码的。

授人以渔,不授人以鱼。
2014-11-03 21:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
获取Windows系统GetLastError()错误文字信息的方法

/*----------------------------
功能:获取Windows系统GetLastError()错误的本地化文字信息
参数:errorCode: 由GetLastError()函数返回的错误码
返回:对应错误码的文字信息字符串
使用:若获取失败,函数返回NULL;若获取成功,应由调用处使用LocalFree()函数主动释放该块内存
------------------------------*/
HLOCAL GetSystemErrorMessageW(DWORD errorCode)
{
    HLOCAL hlocal = NULL;
    DWORD systemLocal = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
    BOOL fOk = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS |
        FORMAT_MESSAGE_ALLOCATE_BUFFER,
        NULL,
        errorCode,
        systemLocal,
        (LPWSTR) &hlocal,
        0,
        NULL);

    if (!fOk)
    {
        hlocal = NULL;
    }

    return hlocal;
}

授人以渔,不授人以鱼。
2014-11-03 21:40
wangjiang624
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-11-3
收藏
得分:0 
回复 2 楼 TonyDeng
那意思是打印不出来??
那还是有必要继续检查是否打开,若不成功依然输出error??
if (fp == NULL) { printf("error"); exit(0); }
2014-11-03 21:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
3楼给了你代码,打印的是本地化文字信息,即如果你的系统是中文Windows,则打印中文错误信息。

授人以渔,不授人以鱼。
2014-11-03 21:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用你的err作参数调用这个函数,它返回一个字符串给你。

wchar_t* msg = GetSystemErrorMessageW(err);
wprintf_s(L"%s", msg);
LocalFree(msg);


[ 本帖最后由 TonyDeng 于 2014-11-3 21:47 编辑 ]

授人以渔,不授人以鱼。
2014-11-03 21:43
wangjiang624
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-11-3
收藏
得分:0 
回复 5 楼 TonyDeng
恩恩,谢谢师兄啦
2014-11-03 21:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
注意:你看到的是宽字符版本,可以自己改成ANSI版本。

授人以渔,不授人以鱼。
2014-11-03 21:48
wangjiang624
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-11-3
收藏
得分:0 
回复 6 楼 TonyDeng
。。报错了。显示用于_main()函数。。这是什么东西?
2014-11-03 21:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我只是给你一个函数,其余的你自己写。记得#include <Windows.h>

授人以渔,不授人以鱼。
2014-11-03 21:56
快速回复:使用 fopen_s 后,若出现打开错误,怎么把 err 所储存的错误信息打印出 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023141 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved