读文件到CString中去 CString asmStr;
FILE* pFile=fopen(filename,"r+b");
long fsize = _filelength(fileno(pFile));
fseek(pFile,0,SEEK_SET);
fread(asmStr.GetBuffer(fsize),fsize,1,pFile);
asmStr.ReleaseBuffer();最后出了一个断言错误 nlength<=getdata()->nalloclength清大家帮忙看看!谢谢!
FILE* pFile=fopen(filename,"r+b");
long fsize = _filelength(fileno(pFile));
fseek(pFile,0,SEEK_SET);
fread(asmStr.GetBuffer(fsize),fsize,1,pFile);
asmStr.ReleaseBuffer();最后出了一个断言错误 nlength<=getdata()->nalloclength清大家帮忙看看!谢谢!
FILE* pFile=fopen(_T("d:\\aa.txt"),"r+b");
long fsize = _filelength(fileno(pFile));
fseek(pFile,0,SEEK_SET);
fread(asmStr.GetBuffer(fsize),fsize,1,pFile);
asmStr.ReleaseBuffer();
fclose(pFile);
void ReleaseBuffer( int nNewLength = -1 )
{
if( nNewLength == -1 )
{
nNewLength = StringLength( m_pszData );
}
SetLength( nNewLength );
}nNewLength 算出来,比fsize大13个字节呢?
int nNewLength = -1
);
Parameter
nNewLength
The new length of the string in characters, not counting a null terminator. If the string is null terminated, the -1 default value sets the CSimpleStringT size to the current length of the string. 如果只是字符串,可以如下做LPTSTR p = s.GetBuffer( XXX );
s.ReleaseBuffer( ); // Surplus memory released, p is now invalid.
你说的非文本信息,是不是就是指的'\0'这样的信息?
那long fsize = _filelength(fileno(pFile)); 我这个fsize算进去'\0'这个的大小了么?就算没算进去的话fread(asmStr.GetBuffer(fsize),fsize,1,pFile); 我已经指定大小了,为什么最后ReleaseBuffer里算出的会大一点呢?
自己网上查下相关文章吧。
char* temp;
temp=(char*)malloc(fsize);
fread(temp,fsize,1,pFile);
//asmStr.ReleaseBuffer();
temp[fsize-1]='\0';
asmStr=temp;
free(temp);
但是我很想知道为why!
望高人指点!
CString asmStr;
char *ptr = asmStr.GetBuffer(fsize+1);
memset(ptr,0,fsize+1);
fread(ptr,fsize,1,pFile);
asmStr.ReleaseBuffer();
char* temp=asmStr.GetBuffer(fsize);
fread(temp,fsize,1,pFile);
temp[fsize-1]='\0';
asmStr.ReleaseBuffer();
非文本信息是指组成不是都有可见字符组成的。
fsize是找到文件的EOF为结尾,中间当然会包含0X00。
建议你这种缓冲分配还是不要用CSTRING了,效率低。
f.Open(fileName,CFile::modeRead);
int n = f.GetLength();
char* temp = new char[n+1];
f.Read(temp,n);
temp[n] = 0;
asmStr = temp;
delete [] temp;反正我是从来不往CString里面直接灌数据,如果需要用GetBuffer也不要给他指定长度,这样可以获得整个长度,release的时候就不出问题了。
你上面的temp[fsize-1]='\0'; 吃掉以一个字符。