Delphi修改文件内容
现在要做一个批量修改文件的小程序,我已经列出指定目录下符合条件的所有文件,并且用pos和copy执行了替换,但是还有一些问题。
1、用遍历目录的方式做的搜索功能不够强大,特别是难以实现搜索包含指定文字的功能,有没有哪个API能调用Windows搜索功能的,或能实现类似功能的?
2、有没有效率比较高的替换函数,因为当文件比较大时,用pos和copy就显示慢了。
3、对于只读的文件不执行替换,并且替换完毕后需要将文件设为只读属性,有哪个函数能判断文件是否只读并能设置文件属性的?
哪位大侠能帮帮忙,感激不尽!
参考答案:第一个问题:
见第二问题解答。
第二个问题:
建议使用内存流或者文件流对象来完成操作:使用例:比如要在C:\tst.dat文件中查找字符为'A'
const
FileName: String = 'C:\tst.dat';
FindText: Char = 'A';
var
Buf: Byte;
Mem: TMemoryStream;
begin
Mem := TMemoryStream.Create;
Mem.LoadFromFile(FileName);
Mem.Seek(0,soBeginning);
while Mem.Position <> Mem.Size do
begin
Mem.Read(Buf,1);
if Chr(Buf) = FindText then
begin
ShowMessage('I Get It At 0x' + IntToHex(Mem.Position,4) + 'H');
Mem.Free;
Exit;
end;
end;
ShowMessage('I cant get it');
Mem.Free;
如果要替换'A'为别的数据使用Mem.Write放在在当前文件指针位置写入ASC码的十六进制纯伞?
第三个问题:
获取文件属性使用:FileAttributes详情参见MS Win32 SDK
修改文件属性使用:SetAttributes 使用例:解开自身只读属性
var
C: PChar;
begin
New(C);
GetMem(C,255);
StrPCopy(C,Application.ExeName);
SetFileAttributes(C,FILE_ATTRIBUTE_NORMAL);
Dispose(C);
end;