各位富翁,进来啊,20分(20分)

  • 主题发起人 主题发起人 jxczr2002
  • 开始时间 开始时间
J

jxczr2002

Unregistered / Unconfirmed
GUEST, unregistred user!
求一个可以删除文件中的第21个字节到第46个字节之间的字符.
 
用Turob c2.0写个小程序再调吧。
我就是这么做的。
我把备份出来的数据库加密了,防止被盗恢复到别的数据库中。
 
什么文件?如是文本的话。
用Memo1装入,然后用Lines.Text属性就可象字符串一样操作了。
 
我也是和它的一样,可以借用下别的编程语言
 
再则用内存流也可搞定,也方便加密。
 
TFileStream TMemoryStream
 
var
FFile, temp: TFileStream;
Ext: String;
aa : pchar;
begin
if OpenDialog1.Execute then begin
fFile := TFileStream.Create(OpenDialog1.FileName,fmOpenWrite);
Ext := extractFileExt(OpenDialog1.Filename);
temp := TFileStream.Create(ExtractFilePath(application.ExeName)+'temp'+Ext,fmCreate);
fFile.Position :=0;
GetMem(aa,21);
ffile.read(aa^,21);
temp.Write(aa^,21);
Freemem(aa);
GetMem(aa,fFile.Size-46);
FFile.Position := 46;
FFile.Read(aa^,fFile.Size-46);
temp.Write(aa^,fFile.Size-46);
temp.Free;
Ffile.Free;
freemem(aa);
end;
end;
 
不好意思上面的错了,下面的代码验证过了
去掉21到46的内容
var
FFile, temp: TFileStream;
Ext: String;
aa : pchar;
MemoryStrm : TmemoryStream;
size : integer;
begin
if OpenDialog1.Execute then begin
fFile := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
Ext := extractFileExt(OpenDialog1.Filename);
temp := TFileStream.Create(ExtractFilePath(application.ExeName)+'temp'+Ext,fmCreate);
fFile.Position :=0;
GetMem(aa,21);
size := ffile.read(aa^,21);
showmessage(intToStr(size));
size := temp.Write(aa^,21);
showmessage(intToStr(size));
Freemem(aa);
GetMem(aa,25);
fFile.Read(aa^,25);
MemoryStrm := TmemoryStream.create;
MemoryStrm.position := 0;
MemoryStrm.Write(aa^,25);
MemoryStrm.SaveToFile(ExtractFilePath(application.ExeName)+'temp1'+Ext);
Memorystrm.Free;
Freemem(aa);
GetMem(aa,fFile.Size-46);
FFile.Position := 46;
FFile.Read(aa^,fFile.Size-46);
temp.Write(aa^,fFile.Size-46);
temp.Free;
Ffile.Free;
freemem(aa);
end;
end;

合并回去
var
temp: TFileStream;
Ext,SecondFile: String;
aa : pchar;
FirstMemory, MemoryStrm : TmemoryStream;
size : integer;
begin
if OpenDialog1.Execute then begin
FirstMemory := TmemoryStream.Create;
FirstMemory.LoadFromFile(OpenDialog1.FileName);
Ext := extractFileExt(OpenDialog1.Filename);
temp := TFileStream.Create(ExtractFilePath(application.ExeName)+'megr'+Ext,fmCreate);
FirstMemory.Position :=0;
GetMem(aa,21);
size := FirstMemory.read(aa^,21);
showmessage(intTostr(size));
size := temp.Write(aa^,21);
Freemem(aa);
GetMem(aa,25);
SecondFile := Copy(OpenDialog1.Filename,0,length(OpenDialog1.Filename)-4);
secondfile := secondfile+'1'+ext;
MemoryStrm := TmemoryStream.create;
MemoryStrm.LoadFromFile(secondfile);
caption := IntToStr(memoryStrm.size);
MemoryStrm.Position := 0;
MemoryStrm.Read(aa^,25);
temp.Write(aa^,25);
Memorystrm.Free;
Freemem(aa);
GetMem(aa,FirstMemory.Size-21);
//FirstMemory.Position := 21;
FirstMemory.Read(aa^,FirstMemory.Size-21);
temp.Write(aa^,FirstMemory.Size-21);
temp.Free;
FirstMemory.Free;
freemem(aa);
end;
end;

 
问题已经解决
谢谢各位的关注和支持
 
多人接受答案了。
 
jxhdy2001-16的做法有点麻烦,其实代码不必要这么长。


不好意思,是看了他的代码后的优化。希望不要挨砖头 。
 

Similar threads

后退
顶部