WriteFile可能出什么错?

Jack_xiao 2011-01-25 11:04:31
目前已知可能出现的错误为:
ERROR_DISK_FULL
ERROR_INVALID_USER_BUFFER
ERROR_NOT_ENOUGH_MEMORY

请问还可能出现什么错?(最好告知错误码)
...全文
333 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jack_xiao 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jack_xiao 的回复:]
引用 15 楼 bokutake 的回复:
ERROR_BUSY
ERROR_WRITE_FAULT
ERROR_WRITE_PROTECT
ERROR_INVALID_ACCESS
ERROR_BAD_LENGTH
ERROR_SEEK
ERROR_NEGATIVE_SEEK
这些是致命错误
ERROR_NOT_READY
ERROR_CRC
ERROR_IO_INCOMP……
[/Quote]

这三个了解了,应该是异步I/O的错吧,我创建的时候没有用FILE_FLAG_OVERLAPPED ,应该就不存在这几个问题了吧
ERROR_IO_INCOMPLETE
ERROR_OPERATION_ABORTED
ERROR_IO_PENDING
Jack_xiao 2011-01-27
  • 打赏
  • 举报
回复
最好能说说出错的情况,分不够可以加

只要WriteFile本身出的错, 文件指针我没有管理,数据都是追加的
Jack_xiao 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 bokutake 的回复:]
ERROR_BUSY
ERROR_WRITE_FAULT
ERROR_WRITE_PROTECT
ERROR_INVALID_ACCESS
ERROR_BAD_LENGTH
ERROR_SEEK
ERROR_NEGATIVE_SEEK
这些是致命错误
ERROR_NOT_READY
ERROR_CRC
ERROR_IO_INCOMPLETE
ERROR_OPERATION_A……
[/Quote]

这两个在什么情况出现
ERROR_BUSY
ERROR_WRITE_FAULT

这几个完全想不到,会是WriteFile的错?
ERROR_INVALID_ACCESS
ERROR_BAD_LENGTH
ERROR_CRC
ERROR_IO_INCOMPLETE
ERROR_OPERATION_ABORTED
ERROR_IO_PENDING

这两个似乎是文件指针处理不当吧,WriteFile会出这种错?
ERROR_SEEK
ERROR_NEGATIVE_SEEK

请指教

Jack_xiao 2011-01-25
  • 打赏
  • 举报
回复
此外,我创建文件的是可读可写,属性参数为FILE_ATTRIBUTE_NORMAL,以CREATE_ALWAYS方式打开文件句柄,这样专门针对各种属性出的错就不会出现,而且,既然走到WriteFile,说明文件已创建成功,在实践中,只出了一个错误,但我想也许有人遇到过其他错误
Jack_xiao 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tandyt 的回复:]
引用 1 楼 visualeleven 的回复:
参考MSDN,或者MFC的部分源代码


MSDN 是最权威的了
[/Quote]

MSDN看了,对于WriteFile只给了两个错误,其他的没列出来,但现在要求处理其他错误(未知)
Jack_xiao 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaoc1026 的回复:]
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.
[/Quote]

错误码得到了,现在想对某些错误专门处理,而不是只显示错误就算了,所以想了解下什么错出现的多些
WriteFile出的
Jack_xiao 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]
C/C++ code

int PASCAL CFileException::OsErrorToException(LONG lOsErr)
{
// NT Error codes
switch ((UINT)lOsErr)
{
case NO_ERROR:
return CFileException::none;
case……
[/Quote]

等于没说,我不可能每个都处理,我只要出现可能性最大的几个,只要WriteFile出的
见习学术士 2011-01-25
  • 打赏
  • 举报
回复
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

辰岡墨竹 2011-01-25
  • 打赏
  • 举报
回复
ERROR_BUSY
ERROR_WRITE_FAULT
ERROR_WRITE_PROTECT
ERROR_INVALID_ACCESS
ERROR_BAD_LENGTH
ERROR_SEEK
ERROR_NEGATIVE_SEEK
这些是致命错误
ERROR_NOT_READY
ERROR_CRC
ERROR_IO_INCOMPLETE
ERROR_OPERATION_ABORTED
ERROR_IO_PENDING
需要重试几次
辰岡墨竹 2011-01-25
  • 打赏
  • 举报
回复
ERROR_BUSY
ERROR_WRITE_FAULT
ERROR_WRITE_PROTECT
ERROR_INVALID_ACCESS
ERROR_BAD_LENGTH
ERROR_SEEK
ERROR_NEGATIVE_SEEK
这些是致命错误
ERROR_NOT_READY
ERROR_CRC
ERROR_IO_INCOMPLETE
ERROR_OPERATION_ABORTED
ERROR_IO_PENDING
需要重试几次
TandyT 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
参考MSDN,或者MFC的部分源代码
[/Quote]

MSDN 是最权威的了
Eleven 2011-01-25
  • 打赏
  • 举报
回复

int PASCAL CFileException::OsErrorToException(LONG lOsErr)
{
// NT Error codes
switch ((UINT)lOsErr)
{
case NO_ERROR:
return CFileException::none;
case ERROR_FILE_NOT_FOUND:
return CFileException::fileNotFound;
case ERROR_PATH_NOT_FOUND:
return CFileException::badPath;
case ERROR_TOO_MANY_OPEN_FILES:
return CFileException::tooManyOpenFiles;
case ERROR_ACCESS_DENIED:
return CFileException::accessDenied;
case ERROR_INVALID_HANDLE:
return CFileException::fileNotFound;
case ERROR_BAD_FORMAT:
return CFileException::invalidFile;
case ERROR_INVALID_ACCESS:
return CFileException::accessDenied;
case ERROR_INVALID_DRIVE:
return CFileException::badPath;
case ERROR_CURRENT_DIRECTORY:
return CFileException::removeCurrentDir;
case ERROR_NOT_SAME_DEVICE:
return CFileException::badPath;
case ERROR_NO_MORE_FILES:
return CFileException::fileNotFound;
case ERROR_WRITE_PROTECT:
return CFileException::accessDenied;
case ERROR_BAD_UNIT:
return CFileException::hardIO;
case ERROR_NOT_READY:
return CFileException::hardIO;
case ERROR_BAD_COMMAND:
return CFileException::hardIO;
case ERROR_CRC:
return CFileException::hardIO;
case ERROR_BAD_LENGTH:
return CFileException::badSeek;
case ERROR_SEEK:
return CFileException::badSeek;
case ERROR_NOT_DOS_DISK:
return CFileException::invalidFile;
case ERROR_SECTOR_NOT_FOUND:
return CFileException::badSeek;
case ERROR_WRITE_FAULT:
return CFileException::accessDenied;
case ERROR_READ_FAULT:
return CFileException::badSeek;
case ERROR_SHARING_VIOLATION:
return CFileException::sharingViolation;
case ERROR_LOCK_VIOLATION:
return CFileException::lockViolation;
case ERROR_WRONG_DISK:
return CFileException::badPath;
case ERROR_SHARING_BUFFER_EXCEEDED:
return CFileException::tooManyOpenFiles;
case ERROR_HANDLE_EOF:
return CFileException::endOfFile;
case ERROR_HANDLE_DISK_FULL:
return CFileException::diskFull;
case ERROR_DUP_NAME:
return CFileException::badPath;
case ERROR_BAD_NETPATH:
return CFileException::badPath;
case ERROR_NETWORK_BUSY:
return CFileException::accessDenied;
case ERROR_DEV_NOT_EXIST:
return CFileException::badPath;
case ERROR_ADAP_HDW_ERR:
return CFileException::hardIO;
case ERROR_BAD_NET_RESP:
return CFileException::accessDenied;
case ERROR_UNEXP_NET_ERR:
return CFileException::hardIO;
case ERROR_BAD_REM_ADAP:
return CFileException::invalidFile;
case ERROR_NO_SPOOL_SPACE:
return CFileException::directoryFull;
case ERROR_NETNAME_DELETED:
return CFileException::accessDenied;
case ERROR_NETWORK_ACCESS_DENIED:
return CFileException::accessDenied;
case ERROR_BAD_DEV_TYPE:
return CFileException::invalidFile;
case ERROR_BAD_NET_NAME:
return CFileException::badPath;
case ERROR_TOO_MANY_NAMES:
return CFileException::tooManyOpenFiles;
case ERROR_SHARING_PAUSED:
return CFileException::badPath;
case ERROR_REQ_NOT_ACCEP:
return CFileException::accessDenied;
case ERROR_FILE_EXISTS:
return CFileException::accessDenied;
case ERROR_CANNOT_MAKE:
return CFileException::accessDenied;
case ERROR_ALREADY_ASSIGNED:
return CFileException::badPath;
case ERROR_INVALID_PASSWORD:
return CFileException::accessDenied;
case ERROR_NET_WRITE_FAULT:
return CFileException::hardIO;
case ERROR_DISK_CHANGE:
return CFileException::fileNotFound;
case ERROR_DRIVE_LOCKED:
return CFileException::lockViolation;
case ERROR_BUFFER_OVERFLOW:
return CFileException::badPath;
case ERROR_DISK_FULL:
return CFileException::diskFull;
case ERROR_NO_MORE_SEARCH_HANDLES:
return CFileException::tooManyOpenFiles;
case ERROR_INVALID_TARGET_HANDLE:
return CFileException::invalidFile;
case ERROR_INVALID_CATEGORY:
return CFileException::hardIO;
case ERROR_INVALID_NAME:
return CFileException::badPath;
case ERROR_INVALID_LEVEL:
return CFileException::badPath;
case ERROR_NO_VOLUME_LABEL:
return CFileException::badPath;
case ERROR_NEGATIVE_SEEK:
return CFileException::badSeek;
case ERROR_SEEK_ON_DEVICE:
return CFileException::badSeek;
case ERROR_DIR_NOT_ROOT:
return CFileException::badPath;
case ERROR_DIR_NOT_EMPTY:
return CFileException::removeCurrentDir;
case ERROR_LABEL_TOO_LONG:
return CFileException::badPath;
case ERROR_BAD_PATHNAME:
return CFileException::badPath;
case ERROR_LOCK_FAILED:
return CFileException::lockViolation;
case ERROR_BUSY:
return CFileException::accessDenied;
case ERROR_INVALID_ORDINAL:
return CFileException::invalidFile;
case ERROR_ALREADY_EXISTS:
return CFileException::accessDenied;
case ERROR_INVALID_EXE_SIGNATURE:
return CFileException::invalidFile;
case ERROR_BAD_EXE_FORMAT:
return CFileException::invalidFile;
case ERROR_FILENAME_EXCED_RANGE:
return CFileException::badPath;
case ERROR_META_EXPANSION_TOO_LONG:
return CFileException::badPath;
case ERROR_DIRECTORY:
return CFileException::badPath;
case ERROR_OPERATION_ABORTED:
return CFileException::hardIO;
case ERROR_IO_INCOMPLETE:
return CFileException::hardIO;
case ERROR_IO_PENDING:
return CFileException::hardIO;
case ERROR_SWAPERROR:
return CFileException::accessDenied;
default:
return CFileException::generic;
}
}
Eleven 2011-01-25
  • 打赏
  • 举报
回复
参考MSDN,或者MFC的部分源代码
Jack_xiao 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sad_4978 的回复:]
不用对,每一个可能发生的错误都进行处理。
针对性的处理几个需要处理的就好了;其他的,统一使用一个默认处理即可。
[/Quote]

我也这么想,可是三个是否太少呢?应该还有其他常见的错误吧?现在就是想找几个有针对性的错误出来
ningweidong 2011-01-25
  • 打赏
  • 举报
回复
你不用对每种错误都做处理
你用一个异常就行了
sad_4978 2011-01-25
  • 打赏
  • 举报
回复
不用对,每一个可能发生的错误都进行处理。
针对性的处理几个需要处理的就好了;其他的,统一使用一个默认处理即可。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧