日期:2014-05-16  浏览次数:20723 次

高分求解....请问Readfile为什么每次只能读到5个字节的东西??
我读的是一个位图,
char *buf;

hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
  OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL) ;
if (hFile == INVALID_HANDLE_VALUE) return NULL ;
dwFileSize = GetFileSize (hFile, &dwHighSize) ;
if (dwHighSize){
  CloseHandle (hFile) ;
return NULL ;}
buf = (char*)malloc ((int)dwFileSize*sizeof(char)) ;
if (! buf) {
  CloseHandle (hFile) ;
  return NULL ;
}
bSuccess = ReadFile (hFile, buf, dwFileSize, &dwBytesRead, NULL) ;
if (strlen(buf)==5)
MessageBox(hwnd1,L"ok",L"ok",0);
在得到文件长度的时候dwFileSize的值是正确的,但是不知道为什么,当我在ReadFile的时候,读出来的strlen(buf)==5,是不是在读的时候由于buf本身是char指针所以没法转换啊?????
应该怎么改呢??

------解决方案--------------------
位图文件本身是二进制文件,里面可能包含\0
而strlen()的依据就是\0

也就是说,虽然ReadFile读了100字节的数据,但是其中第6个字节为\0,那么strlen()计算的长度就是5

对于二进制数据是不能strlen的
------解决方案--------------------
用char *来存储没有问题,只是长度不能通过strlen来计算
是不是可以使用dwBytesRead的值作为实际长度?

你这个是windows程序吧,我不是很熟悉