这个问题卡了我很久了,之前问过很多遍了,一直没得到满意答复,求高手指点。。万分感谢。下面我描述小我的问题。
1。目的:我的目的是实现文件读写,编辑功能。我会在文件中间插入一些我想要加入的文本。但不影响原有的文件编码方式,比入 ANSI UTF-8 ,等等。对于要加入文本的位置,我是通过查找原文件中的关键字来确定插入位置的。
2。我的处理是,用二进制方式读写的。 fopen(fp,"rb)打开文件,然后fread 到 char* buffer,然后查找修改位置,用
char* pinsert = strstr(buffer, "我要找到你"); 最后通过fopen(fp,"wb"); 将处理后的数据写回文件。
=================================================================================================
我的代码大致如下:
==============================================================================================
FILE *fp;
fp= fopen( "file path", "rb" );
if(!fp)
{
return ;
}
long len,len2;
fseek(fp,0,SEEK_END);
len = ftell(fp);
fseek(fp,0,SEEK_SET);
char* data;
char* file_buf = NULL;
if( len )
{
file_buf = new char[len+1];
if(file_buf)
{
file_buf[len] = L'\0';
fread(file_buf,1,len,fp);
data = file_buf;
}
fclose(fp);
}
else
{
// empty file
fclose(fp);
return;
}
if (NULL == data)
{
TRACE("data is NULL\n");
delete [] file_buf;
return;
}
=============================
通过查找关键字定位要编辑的位置。
const char* pstrKeyword = "我要找到你";
char * pdata = strstr(data,pstrKeyword);
用3个指针标记文件
char* pUp 数组中 0 到 pdata 部分 长度len2
char* pIn 要插入的数据
char* pdata pdata 到buffer数据结尾
================================
最后写数据
fp= fopen( "file path", "wb" );
fwrite(pUp,1,len2,fp);
fprintf(fp,"%s\n",pIn);
fwrite(pdata,1,(len-len2),fp);
=======================================================================
3. 为了支持带汉字的路径我将fopen 替换为 _wfopen了。其他处理不变,依然正常使用。
4。但我将其他的cahr版本的api替换为宽字节版本的,并用wchar_t* buffer来存储读入的文件数据,这时候 TCHAR * pstr = wcsstr ( buffer,L"我要找到你"); 就无法查到我要找的关键字了。
问题:谁能帮我解答这是为什么呢,我之前用char 版本的api处理有什么潜在问题么?如果有潜在问题,如何解决好呢。
另外,很多工具支持多种编码,比如editplus,秀丸 。。并用CTRL+F 来查找关键字,像这些编辑工具是怎么实现查找关键字的的呢。 |