描述:
我这个程序里面用的是capicom,要传进去的是_bstr_t,所以要将char转化为这个类型,
我准备读一个文件,char转化为->_bstr_t中间处理(这里程序里我没有加上)以后转化为char再写文件,不知道是我读文件方法有误还是转化有问题,我读出来的东西总是有问题,所以我作了个试验:将我读出来的东西再写进去都不能得到一模一样的,所以我想在此请高手给个1、读写文件(尤其是大文件)的方法;2、char * 与_bstr_t的转化方法:
我的程序如下:
_bstr_t srcFileContent; //源文件内容
_bstr_t srcFileName; //源文件名称
_bstr_t desFileName; //目标文件名称
_bstr_t signedData; //签名结果
CHAR pszBuffer[BUFFER_SIZE]; //读取文件的缓冲区
memset(pszBuffer,0,BUFFER_SIZE);
DWORD dwBytesRead = 0;
DWORD dwWritten = 0;
FILE *hSourceFile = NULL; //源文件句柄
FILE *hSignedFile = NULL; //目标文件句柄
dwBytesRead = fread(pszBuffer,sizeof*pbstrDesFileName = NULL;
try
{
srcFileContent = _bstr_t();
srcFileName = _bstr_t(bstrSrcFileName,TRUE);
desFileName = _bstr_t(bstrSrcFileName,TRUE)+".sig";
//读文件内容
if( (hSourceFile = fopen((const char*)srcFileName,"r+t")) == NULL)
{
hr = Error(_T("文件打开失败!"));
}
do
{
dwBytesRead = fread(pszBuffer,sizeof(CHAR),BUFFER_SIZE,hSourceFile);
if (ferror(hSourceFile))
{
hr = Error(_T("读文件出错!"));
}
srcFileContent += pszBuffer;
} while(!feof(hSourceFile));
if (hSourceFile)
fclose(hSourceFile);
//这里中间是处理别的东西的程序,不是我想请教的重点
//存放签名结果的文件名称
if( (hSignedFile = fopen((const char*)desFileName,"w+t")) == NULL)
{
hr = Error(_T("文件打开失败!"));
}
else
dwWritten = fwrite((const char*)srcFileContent,sizeof(CHAR),srcFileContent.length(),hSignedFile);//写文件
这里srcFileContent是将char转化得到的结果,这里我作了极端的处理:将srcFileContent再次写入另一个文件(该文件的名字后面加上.sig),照理应该得到一模一样的结果,然而得到的文件却不是,我就想请教高手我这里是因为读写文件有问题还是_bstr_t与char *的转化有问题?
回答我这个问题的同志我真的非常感谢,因为这个问题是困扰我好久的问题,你是高手,你来年一定交桃花运:)
我的QQ:8456267
MSN:mxm_cfca@hotmail.com