怎么用TFileStream读取文件中特定的二进制字符??在线等候!多谢!

sun_wyz 2002-10-23 08:57:50
比如用UtrEdit打开一个文件,
文件中有SIZE这个标志,
我想读取其后的16个字符,
怎么办ni?
Delphi中用$这个东西,
BCB中用什么ni?
多谢大虾了!
...全文
103 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzhengwang 2002-10-24
  • 打赏
  • 举报
回复
BCB中从大文件中读取的算法

char *Flag[]={'S','I','Z','E'};
char *OutBuf=new char[17];//保存要读取的16个字符
char TheChar;//临时字符
int CurrentCount=0;//当前要和“SIZE”比较的字符位置
bool Ret=false;//函数返回值,true为找到了SIZE标志
TFileStream *File=new TFileStream
(FileName,fmOpenRead|fmShareDenyWrite);

try{
while(File->Position<File->Size){
File->Read(&TheChar,1);//每次读一个字节
if(TheChar==Flag[CurrenCount]){
//读取的字符等于标志字符串中特定位置的字符
CurrentCount++;
//标志字符串中特定位置后移
if(CurrentCount==3){
//全部符合,则读取16个字符到输出缓冲
File->Read(OutBuf,16);
//置成功标志
Ret=true;
//退出循环
break;
}
}
else{
//字符比较不对,则标志字符串中特定位置从头开始
CurrentCount=0;
}

}

}
__finally{
delete File;
}

return Ret
sun_wyz 2002-10-24
  • 打赏
  • 举报
回复
还没试呢,先谢谢了!!!
我的宽带晚上10点以后居然上不了论坛:(
zhangzhengwang 2002-10-24
  • 打赏
  • 举报
回复
BCB中从小文件中读取的算法,速度快,但对内存容量有限制

bool Ret=false;//函数返回值,true为找到了SIZE标志
char *OutBuf=new char[16];//保存要读取的16个字符
char *FileBuf;//保存文件缓冲区的指针
char *Point;//查找用的临时指针
int Size=0;//缓冲区大小

TFileStream *File=new TFileStream
(FileName,fmOpenRead|fmShareDenyWrite);

//分配一个和文件一样大小的内存区,一次将整个文件读入
Size=File->Size;
FileBuf=new char[Size];
File->Read(FileBuf,Size);
delete File;

//从文件缓冲区开头循环查找到结束
Point=FileBuf;
while(Point<FileBuf+Size){
if((*Point=='S')&&(*(Point+1)=='I')&&
(*(Point+2)=='Z')&&(*(Point+3)==E)){
//从文件缓冲区中当前查找指针开始的四个字符全部符合,
//则指针后移四个字符后再拷贝16个字符到输出缓冲
Point+=4;
memcpy(OutBuf,FileBuf,16);
//置成功标志
Ret=true;
//退出循环
break;
}
else{
//条件不符合则查找指针后移
Point++;
}
}

delete []FileBuf;

return Ret



注意:以上两个算法没有经过调试,只是演示算法,可能会有错误

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧