WriteFile使用出错

wz200210 2010-08-27 09:51:41
if(ReadFile(hInfoFile, &dwUsedCount, sizeof(DWORD), &dwRSize, NULL))//读取已使用的次数
{
dwUsedCount++;
SetFilePointer(hInfoFile, -4, &lSizeH, FILE_CURRENT);
if(WriteFile(hInfoFile, &dwUsedCount, 4, &dwRSize, NULL))
。。。。。
想做的事情很简单,将文件中的DWORD读出在加1写入文件覆盖掉原来的内容,调试时发现写文件异常,不仅将DWORD的内容覆盖了,连之后的文件都改写了,并且会一直写文件,知道文件差不多有4g大小时停止,难道我的写法有问题吗??求达人解答
...全文
250 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-08-27
  • 打赏
  • 举报
回复
应该是SetFilePointer使用有误
wz200210 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hai040 的回复:]

DWORD WINAPI SetFilePointer(
__in HANDLE hFile,
__in LONG lDistanceToMove,
__in_out_opt PLONG lpDistanceToMoveHigh,
__in DWORD dwMoveMethod
);

lpDistanceTo……
[/Quote]
刚刚调试了下,发现应该就是SetFilePointer函数的问题,lpDistanceToMoveHigh设为NULL就可以了,我想问一下这个函数的具体的注意事项还有那些
hai040 2010-08-27
  • 打赏
  • 举报
回复
DWORD WINAPI SetFilePointer(
__in HANDLE hFile,
__in LONG lDistanceToMove,
__in_out_opt PLONG lpDistanceToMoveHigh,
__in DWORD dwMoveMethod
);

lpDistanceToMoveHigh
A pointer to the high order 32-bits of the signed 64-bit distance to move.

If you do not need the high order 32-bits, this pointer must be set to NULL.

When not NULL, this parameter also receives the high order DWORD of the new value of the file pointer. For more information, see the Remarks section in this topic.

wz200210 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lcl_data 的回复:]

引用 2 楼 wz200210 的回复:
引用 1 楼 hai040 的回复:

writefile size不用指针吧
查msdn

第4个参数是实际写入文件的字节数,指针传入,msdn查看无误


BOOL WINAPI WriteFile(
__in HANDLE hFile,
__in LPCVOID lpBuffer,
……
[/Quote]
第三个参数是你想写入的字节数,第四个是函数实际写入的字节数
十八道胡同 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wz200210 的回复:]
引用 1 楼 hai040 的回复:

writefile size不用指针吧
查msdn

第4个参数是实际写入文件的字节数,指针传入,msdn查看无误
[/Quote]

BOOL WINAPI WriteFile(
__in HANDLE hFile,
__in LPCVOID lpBuffer,
__in DWORD nNumberOfBytesToWrite,
__out_opt LPDWORD lpNumberOfBytesWritten,
__inout_opt LPOVERLAPPED lpOverlapped
);

第3个参数是实际写入文件的字节数
wz200210 2010-08-27
  • 打赏
  • 举报
回复
在文件末尾写内容我用writefile是不会出错的,可是在文件中将原来内容覆盖就会出错
十八道胡同 2010-08-27
  • 打赏
  • 举报
回复
这里有个例子

// writefile.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
//调用CreateFile函数以只写方式打开一个文件
HANDLE hFile=CreateFile(argv[1],GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
printf("CreateFile error\n");
return 0;
}
//调用SetFilePointer函数调整文件指针位置,移动到文件末尾
if(SetFilePointer(hFile,0,NULL,FILE_END)==-1)
{
printf("SetFilePointer error \n");
return 0;
}
char buff[256]="配置信息";
DWORD dwWrite;
//把buff中的内容写入到文件末尾
if(!WriteFile(hFile,&buff,strlen(buff),&dwWrite,NULL))
{
printf("WriteFile error \n");
return 0;
}
printf("往%s中写入数据成功\n",argv[1]);
CloseHandle(hFile);
return 0;
}
wz200210 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hai040 的回复:]

writefile size不用指针吧
查msdn
[/Quote]
第4个参数是实际写入文件的字节数,指针传入,msdn查看无误
hai040 2010-08-27
  • 打赏
  • 举报
回复
writefile size不用指针吧
查msdn

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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