使用ReadFile读文件的时候把122错误,请那个大虾讲下可能是什么原因造成,最好给下解决思路

解决方案 »

  1.   

    给出的缓冲区不够大,看看你的ReadFile及缓冲区分配的代码。
      

  2.   

    贴出你ReadFile以及传给ReadFile的数组的定义
      

  3.   

    楼上说的对 应该是这个LPVOID lpBuffer的参数,分配空间太小吧。
      

  4.   

    楼上的来看
    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
      

  5.   

    pTemBuffer是怎么分配的空间?m_nSize的值是多少?
      

  6.   

    你可以先把m_nSize改为0x2000试试。
      

  7.   

    貌似没什么意义啊, m_nSize是我取数据的大小,从10进制8192换到16进制有什么区别么
      

  8.   

    FILE_SHARE_READ ¦FILE_SHARE_WRITE去掉
      

  9.   

    你前面写的是8MB,所以我让你改成8KB试一下。
    pTemBuffer是怎么分配的空间?
      

  10.   

    pTemBuffer是new出来的8M空间,用来接收读出来的数据,目的就是8M大小的读
      

  11.   

    你是在什么系统下运行的?我试了一下,在XP下ReadFile是不会产生这个错误的。确认一下,你是不是判断ReadFile的返回值为FALSE,然后立即GetLastError的?另外建议你换个运行环境试一下。
      

  12.   

    这是程序报出来的BUG,以前一直没跑出来过,最近换了环境才跑出来的,所以才发上来问问报122错误大概都可能是些什么原因
      

  13.   

    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给出的长度不是整扇区时,错误是参数无效。这个错误看起来是系统中的其它操作产生的。
      

  14.   

       呵呵,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 错误的详细解释,能告诉我那里找的么,谢了
      

  15.   

    Microsoft Visual Studio 8\VC\PlatformSDK\Include\Error.h(152)