最近在读取html文件的内容时,遇到问题:
数据的长度明明很大,但读取的char*数据只显示几个字节,转换为wstring后,也是只显示几个字节。
在研究内存之后,发现是因为数据中存在 \0 字符,char*,CString等在遇到 \0 时就会丢弃后面的数据。
//读取文件内容:
HANDLE hFile = CreateFile(szFilePath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
if (hFile == INVALID_HANDLE_VALUE)
{
LOG_ERROR(L"判断简历文件:读取文件内容出错(%d)", GetLastError());
return false;
}
DWORD dwFileSize = GetFileSize(hFile,0);
char* buffer = new char[dwFileSize];
::SetFilePointer(hFile,0, NULL, FILE_BEGIN);
DWORD dwRead = 0;
BOOL filesucc=::ReadFile(hFile,buffer,dwFileSize, &dwRead, NULL);
if(filesucc==0)
{
LOG_ERROR(L"判断简历文件:读取文件内容出错(%d)", GetLastError());
return false;
}
CloseHandle(hFile);
char * pchar = replaceAll(buffer, '\0', '\n', rtnLength );//CString assign等遇到\0会丢弃后面的数据
replaceAll定义如下:
char * replaceAll(char * src,char oldChar,char newChar, int length)
{
char * head=src;
int i = 0;
while(i < length/**src!='\0'*/)
{
if(*src==oldChar)
*src=newChar;
src++;
i ++;
}
return head;
}