Windows错误122:传递给系统调用的数据区域太小

ls443085074 2008-06-02 04:14:39
使用ReadFile读文件的时候把122错误,请那个大虾讲下可能是什么原因造成,最好给下解决思路
...全文
6942 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
rambowu 2010-12-31
  • 打赏
  • 举报
回复
很好。学习了
cnzdgs 2008-06-04
  • 打赏
  • 举报
回复
Microsoft Visual Studio 8\VC\PlatformSDK\Include\Error.h(152)
ls443085074 2008-06-04
  • 打赏
  • 举报
回复
呵呵,cnzdgs很热心,多谢了,我们最后写了个测试程序,发现只有读到我们划分的某个块时才会出这样的错误,所以得出的结论是磁盘磁道可能坏了,换了个磁盘没有在出现这错误了,谢了阿~~。
顺便问下,你这段“Some call require the application to pass in a buffer filled with data.
This error is returned if the data buffer is too small.
For example: DosSetFileInfo requires 4 bytes of ata.
If a two byte buffer is passed in then this error is returned.
error_buffer_overflow is used when the output buffer in not big enough. ”英文那里找的,当出了这个问题的时候我发现很难找到关于Windows error 错误的详细解释,能告诉我那里找的么,谢了
ls443085074 2008-06-03
  • 打赏
  • 举报
回复
这是程序报出来的BUG,以前一直没跑出来过,最近换了环境才跑出来的,所以才发上来问问报122错误大概都可能是些什么原因
cnzdgs 2008-06-03
  • 打赏
  • 举报
回复
你是在什么系统下运行的?我试了一下,在XP下ReadFile是不会产生这个错误的。确认一下,你是不是判断ReadFile的返回值为FALSE,然后立即GetLastError的?另外建议你换个运行环境试一下。
ls443085074 2008-06-03
  • 打赏
  • 举报
回复
pTemBuffer是new出来的8M空间,用来接收读出来的数据,目的就是8M大小的读
cnzdgs 2008-06-03
  • 打赏
  • 举报
回复
Some call require the application to pass in a buffer filled with data.
This error is returned if the data buffer is too small.
For example: DosSetFileInfo requires 4 bytes of ata.
If a two byte buffer is passed in then this error is returned.
error_buffer_overflow is used when the output buffer in not big enough.

从这段说明可以看出,这个错误码是在获取或者设置某种信息时,给出的缓冲区小于要求的结构大小时才会出现的。而ReadFile不是这种功能,当ReadFile给出的缓冲区过小时,错误是访问内存无效;ReadFile给出的长度不是整扇区时,错误是参数无效。这个错误看起来是系统中的其它操作产生的。
cnzdgs 2008-06-02
  • 打赏
  • 举报
回复
你前面写的是8MB,所以我让你改成8KB试一下。
pTemBuffer是怎么分配的空间?
ls443085074 2008-06-02
  • 打赏
  • 举报
回复
你说说为什么去掉的原因么
daijunhua 2008-06-02
  • 打赏
  • 举报
回复
FILE_SHARE_READ ¦FILE_SHARE_WRITE去掉
ls443085074 2008-06-02
  • 打赏
  • 举报
回复
貌似没什么意义啊, m_nSize是我取数据的大小,从10进制8192换到16进制有什么区别么
cnzdgs 2008-06-02
  • 打赏
  • 举报
回复
你可以先把m_nSize改为0x2000试试。
cnzdgs 2008-06-02
  • 打赏
  • 举报
回复
pTemBuffer是怎么分配的空间?m_nSize的值是多少?
ls443085074 2008-06-02
  • 打赏
  • 举报
回复
楼上的来看
m_DiskHandle2 = CreateFile(diskpath,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING,
NULL);
我是以没有缓冲区的方式来创建的句柄
读取代码为
bReadResult = ReadFile(m_DiskHandle2,pTemBuffer,m_nSize,&dwBytesReadReal,NULL);
pTemBuffer 数据接收8M
nSize 8M
leelittlelong 2008-06-02
  • 打赏
  • 举报
回复
楼上说的对 应该是这个LPVOID lpBuffer的参数,分配空间太小吧。

Chivalry 2008-06-02
  • 打赏
  • 举报
回复
贴出你ReadFile以及传给ReadFile的数组的定义
cnzdgs 2008-06-02
  • 打赏
  • 举报
回复
给出的缓冲区不够大,看看你的ReadFile及缓冲区分配的代码。

16,548

社区成员

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

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

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