如何把一个目录下的所有.dat结尾的文件全部重命名?(50分)

  • 主题发起人 主题发起人 solock
  • 开始时间 开始时间
S

solock

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把一个目录下的所有.dat结尾的文件全部重命名?
要求:不要组件、控件。
 
看文件管理的那个单元,函数多多.
 
procedure TForm1.Button1Click(Sender: TObject);

var
sr: TSearchRec;
FileAttrs: Integer;
begin
StringGrid1.RowCount := 1;
if CheckBox1.Checked then
FileAttrs := faReadOnly
else
FileAttrs := 0;
if CheckBox2.Checked then
FileAttrs := FileAttrs + faHidden;
if CheckBox3.Checked then
FileAttrs := FileAttrs + faSysFile;
if CheckBox4.Checked then
FileAttrs := FileAttrs + faVolumeID;
if CheckBox5.Checked then

FileAttrs := FileAttrs + faDirectory;
if CheckBox6.Checked then
FileAttrs := FileAttrs + faArchive;
if CheckBox7.Checked then

FileAttrs := FileAttrs + faAnyFile;

if FindFirst(Edit1.Text, FileAttrs, sr) = 0 then

begin
with StringGrid1 do
begin
if (sr.Attr and FileAttrs) = sr.Attr then
begin
Cells[1,RowCount-1] := sr.Name;
Cells[2,RowCount-1] := IntToStr(sr.Size);
end;
while FindNext(sr) = 0 do
begin
if (sr.Attr and FileAttrs) = sr.Attr then
begin
RowCount := RowCount + 1;
Cells[1, RowCount-1] := sr.Name;

Cells[2, RowCount-1] := IntToStr(sr.Size);
end;
end;
FindClose(sr);
end;
end;
end;

要仅改文件名,可以分别提取文件名和扩展名:
ExtractFileName
ExtractFileExt

改名时要考虑和目录中的其它文件重名的问题!!
 
摘自Delphi帮助:
var
FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(FromF, OpenDialog1.FileName);
Reset(FromF, 1); { Record size = 1 }
if SaveDialog1.Execute then { Display Save dialog box}
begin
AssignFile(ToF, SaveDialog1.FileName); { Open output file }
Rewrite(ToF, 1); { Record size = 1 }
Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
+ ' bytes...');
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(ToF);
end;
end;
end;

把其用以对话框打开和保存用循环做。对于打开,还得搜索符合条件的文件.用extractfileext取出扩展名与.dat比较,相等则改名并保存
 
index := FindFirst(FilePath + '*.dat', faAnyFile, sr);
while index = 0 do
begin
ListBox1.Items.Add(sr.Name);
index := FindNext(sr);
end;
FindClose(sr);
这样就把FilePath目录下的所有*.dat文件都读到ListBox1的列表里,接下来用一个For循环逐个的更名,更名函数RenameFile(OldName;NewName);
 
实现楼主所说的功能需要做到以下二点

1. 遍历目录函数,返回符合条件的文件List(此函数功能包括是否包含子目录下文件,去文件只读、隐藏等属性)

2. 重命名时考虑因文件重名而导致的命名失败,因此也要写一个RenameFile()的递归函数

楼主如需要,我可以帖段源码给你
 
用REN 命令
 
我说了不要添加可见控件的哦~~
 
后退
顶部