急,RenameFile函数在myRenameFile递归时中未起作用

wanna2003 2004-11-10 09:13:20
unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, FileCtrl;

type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label1: TLabel;
DirectoryListBox1: TDirectoryListBox;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
function IsValidDir(SearchRec: TSearchRec):Boolean;
function myRenamefile(MainPath: string):boolean;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
var NowPath: string;
{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
NowPath := DirectoryListBox1.Directory;
myRenamefile(NowPath+'\*.*');
BitBtn1.Tag := BitBtn1.Tag+1;
Application.MessageBox('转换完毕','提示',MB_OK+64);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
Application.Terminate;
end;

function TForm1.myRenamefile(MainPath: string):boolean;
var
i: Integer;
tmp: string;
subdir: TStrings;
SearchRec: TSearchRec;
found: boolean;
begin
found := false;
i := 1;
if length(NowPath)<>0 then
i := FindFirst(MainPath,faAnyFile, SearchRec)
else
Application.MessageBox('请先从目录列表中选择转换路径!','提示',MB_OK+64);
subdir := TStringList.Create;
//找出所有下级子目录
if i=0 then
begin
if IsValidDir(SearchRec) then
subdir.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
if IsValidDir(SearchRec) then
subdir.Add(SearchRec.Name);
end;
i := FindFirst(MainPath,faAnyFile, SearchRec);
end;
while i=0 do
begin
//文件改名
if (BitBtn1.Tag mod 2)=0 then
tmp := Lowercase(SearchRec.Name)
else
tmp := Uppercase(SearchRec.Name);
RenameFile(SearchRec.Name,tmp);
i := FindNext(SearchRec);
end;

//递归部分
for i := 0 to subdir.Count-1 do
found := myRenamefile(NowPath+'\'+subdir.Strings[i]+'\*.*');
result := found;

//释放资源
subdir.free;
FindClose(SearchRec);
end;

//查询是否有子目录
function TForm1.IsValidDir(SearchRec: TSearchRec):Boolean;
begin
if (SearchRec.Attr=16) and (SearchRec.name<>'.') and (SearchRec.name<>'..') then
Result := true
else
Result := false;
end;

end.

跟踪文件改名操作时发现可以正确更改根目录下文件,对子目录下文件却无法正常操作,动态跟踪了tmp以及SearchRec.name的值,没有任何问题,所以怀疑是不是RenameFile罢工了@_@,请高手点拔
...全文
77 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanna2003 2004-11-10
  • 打赏
  • 举报
回复
原来是要用全路径,是我粗心没仔细看函数说明
DeadWolf 2004-11-10
  • 打赏
  • 举报
回复
SearchRec.name和tmp是否包含路径,应该是全路径名

///////
但是在执行子目录改名时,它就是硬没改过来(如果是根目录下的文件却又能改),困惑中。。
///////

子目录跟进去,如果你自己都懒得不跟进去,别人也懒得跟进去

wanna2003 2004-11-10
  • 打赏
  • 举报
回复
帖子那么快就沉了,有没有热心的人指点一下啊,着急
wanna2003 2004-11-10
  • 打赏
  • 举报
回复
先谢谢2楼的关注,其实我直接跟踪文件改名效果一样的,问题是通过动态跟踪我已经看到了源文件名SearchRec.name和目标文件名tmp是2个不同的文件名,但是在执行子目录改名时,它就是硬没改过来(如果是根目录下的文件却又能改),困惑中。。
DeadWolf 2004-11-10
  • 打赏
  • 举报
回复
断点到
//递归部分
for i := 0 to subdir.Count-1 do
found := myRenamefile(NowPath+'\'+subdir.Strings[i]+'\*.*');
result := found;

再跟进去

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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