WriteFile错误;

sailor_Song 2008-11-03 01:35:04
RET_API IC_KW_WriteFileEx ( FILEHD a_hdFile,
int32 a_dwStart,
void * a_lpBuf,
int32 a_dwReqLen,
int32* a_dwRealLen )
{
w_move = a_dwStart;
w_high = 0;
// Position Pointer
SetFilePointer(a_hdFile, w_move, &w_high ,FILE_BEGIN);

// Write Data
WriteFile(a_hdFile, a_lpBuf, a_dwReqLen, (u_long*)a_dwRealLen, NULL);
// Check
if(a_dwReqLen == *a_dwRealLen){
iRet = TRUE;
}
return iRet;
}
调用WriteFile写文件,到某一个时候(这个相对固定)写入某一个buffer数据的时候,会把文件的起始位置的4个byte的数据修改掉,但是修改后的内容并不是要写入buffer数据中的某4个byte。
why?
也没有error出现。setFilePointer也是正确的,
出现问题的时候,是在文件末尾添加内容。





...全文
372 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanglian1126 2008-11-05
  • 打赏
  • 举报
回复
自己去想吧^^
帅得不敢出门 2008-11-03
  • 打赏
  • 举报
回复
摘自msdn
dwPtr = SetFilePointer(a_hdFile, w_move, &w_high ,FILE_BEGIN);
if (dwPtr == INVALID_SET_FILE_POINTER) // Test for failure
{
// Obtain the error code.
dwError = GetLastError() ;

// Deal with failure
// . . .

} // End of error handler

还有检查返回值看看,是否移动的位置跟自己想像的一致.
还有楼主没用多线程吧?

pingzi_1119 2008-11-03
  • 打赏
  • 举报
回复
up
星羽 2008-11-03
  • 打赏
  • 举报
回复
SetFilePointer(a_hdFile, w_move, &w_high ,FILE_BEGIN);

你这里移动了多少?如果移动了,当然不会写在文件头了啊

还有你最好检查下返回值
wuyu637 2008-11-03
  • 打赏
  • 举报
回复
估计是这个时候,你的文件位置指针失效造成的。

打开文件的时候,一般会有一个指针指向当前读写的位置,默认的位置是文件的开头。
你说setFilePointer正常,再查查看?

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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