在单步调试的时候,能向磁盘中写数据;但是整体执行的时候,WriteFile()的返回值正确,但是磁盘中的数据没有变化
用GetLastError()检查,返回值是0
函数写法:WriteFile(hDevice, pInput, nBytesOfInput, &dwBytesWritten, NULL);尝试过的方法有:
1.可能是WriteFile()没有立刻执行,于是在WriteFile()之后调用Sleep(100),不管用
2.可能是由于缓存机制没有立刻写入,使用FlushFileBuffers(hDevice)强制写入,也不管用
3.在CreateFile()时使用参数FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH,同样不能成功最令人困惑的地方是:如果在调试状态下,执行到即将进行写操作的代码行处然后单步调试(F10),则可以写入;但是如果直接运行程序的话,却不能写入。而这两种情况下WriteFile()的返回值都是正确的,且参数中lpNumberOfBytesWritten也和nNumberOfBytesToWrite是相等的。向各位大牛请教

解决方案 »

  1.   

    打开文件有写权限吗? CloseHandle 没有?
    贴完整代码
      

  2.   

    完整代码太长了,CloseHandle在析构函数中调用了
      

  3.   

    严格检查每api返回值。出错就return. 我一直用c文件操作. 还有win32api来读2g以上文件. 写入大小2g内,用c就搞定了. 追加写/覆盖写.
      

  4.   

    你写完后,马上CloseHandle,看能写进去不?
      

  5.   

    writefile操作成功后调用FlushFileBuffers写入磁盘
      

  6.   

    这个不行啊,Sleep(10000)就可以,Sleep(1000)就不行