大家帮忙看看猛料上的这段代码,为什么不能完成批量删除文件的操作?(在线)

Mrkang 2004-03-29 01:42:35
Procedure DelSomeFiles(fn: string);

var

SearchRec: TSearchRec;

begin

FindFirst(fn, faAnyFile, SearchRec);

repeat

if FileExists(SearchRec.Name) then

begin

FileSetAttr(SearchRec.Name,0); //修改文件属性为普通属性值

DeleteFile(SearchRec.Name); //删除文件

end;

until (FindNext(SearchRec)<>0);

FindClose(SearchRec);

end;
...全文
57 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mrkang 2004-03-30
  • 打赏
  • 举报
回复
up again
Mrkang 2004-03-30
  • 打赏
  • 举报
回复
up
Mrkang 2004-03-30
  • 打赏
  • 举报
回复
用*.*好像是不行的,必须得先指定一个文件名,然后Serchrec.name才能达到文件名,不过在用FindNext就不行了,等待高手
nyf1220 2004-03-30
  • 打赏
  • 举报
回复
FindFirst('c:\test\*.*', faAnyFile, SearchRec);
我测试了一下,为什么返回来的serchrec.name是'.'尔不是某一个文件名

test 下是有文件的
Mrkang 2004-03-30
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
f:TsearchRec;
begin
FindFirst('c:\windows\Desktop\1\Project1.exe',0,f);
SetcurrentDir(ExtractFileDir('c:\windows\Desktop\1\Project1.exe'));
//FileSetAttr(f.Name,0);
DeleteFile('f.name');
end;

这段代码应该没问题吧,但是不行啊
jyh149129 2004-03-30
  • 打赏
  • 举报
回复
对,我觉得最主要是看懂意思!
ehom 2004-03-30
  • 打赏
  • 举报
回复
这段代码的核心不过是告诉你,只读文件修改文件属性后就能正确删除,具体怎么写代码完全还可以自由发挥
ehom 2004-03-30
  • 打赏
  • 举报
回复
没问题,绝对可以正确删除文件

不是说了单步调试吗?看看执行了哪些代码,你把上面加的代码放错地方了吧?一句句代码单步调试还怕找不到这么简单的问题,一共也没几句代码
Mrkang 2004-03-30
  • 打赏
  • 举报
回复
to ehom(?!) (

没作用啊,我调试了很长时间也没有成功啊
woodsway 2004-03-30
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
f:TsearchRec;
begin
FindFirst('c:\windows\Desktop\1\*.*',faAnyFile,f);
While FindNext(f)<>0 do
begin
if f.Attr <> faDirectory then ///////////////
begin
FileSetAttr(f.Name,0);
DeleteFile('c:\windows\Desktop\1\'+f.name);
end;
end;
FindClose(f);
end;
ehom 2004-03-30
  • 打赏
  • 举报
回复
说了这么多,你还是没有设法去理解每一句代码的意思,你叫别人有什么办法?帮你写代码吗?

帮助里面也有例子,模仿吧~~~

再解决不了,也没人帮的了你了,这次是这个问题,下次还有其它问题,关键还是摸索出自己调试程序,解决问题,查找资料的一系列方法~~~
Mrkang 2004-03-30
  • 打赏
  • 举报
回复
to ehom(?!)


现在是一个文件也不能删除
Mrkang 2004-03-30
  • 打赏
  • 举报
回复
up
ehom 2004-03-30
  • 打赏
  • 举报
回复
应该是
while FindNext(f) = 0

为什么要用while?这里当然用repeat...until更好,你总不能把FindFirst找到的第一个文件忽略吧.

你要用while,前面必须先处理第一个文件.所以用repeat...until这里更简单~~~

你只是删除文件,这里就没必要用faAnyFile,这样会把文件夹什么的全部包含在内.

也没必要失去信心,这都是很基础的东西,并不难,之所以在这种问题上浪费了大量时间,完全是由于你还太不仔细造成的.

Mrkang 2004-03-30
  • 打赏
  • 举报
回复
up
Mrkang 2004-03-30
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
f:TsearchRec;
begin
FindFirst('c:\windows\Desktop\1\*.*',faAnyFile,f);
While FindNext(f)<>0 do
begin
FileSetAttr(f.Name,0);
DeleteFile('c:\windows\Desktop\1\'+f.name)
end;
FindClose(f);
end;

还是不行啊?为什么,我为什么这么蔡,怎么就这么蔡
wfff 2004-03-30
  • 打赏
  • 举报
回复
FindFirst 参数中用*.*是可以的.

Mrkang(我为什么这么菜,怎么就这么菜,) 的代码中DeleteFile('f.name');中把引号去掉就可以了。

大家测试有问题的原因是F.name仅仅是文件名,前面没有路径所以没法找到文件。解决的办法一种就是SetcurrentDir,另一种就是直接在前面加上路径就可以了:

DeleteFile('c:\windows\Desktop\1\'+f.name);
ehom 2004-03-30
  • 打赏
  • 举报
回复
这么简单的东西,帮助上,MSDN上描述的都是那么的详细清楚~~~如果还搞不明白,真的要好好检讨,自己是怎么看的,写程序,少了细心可不行
ehom 2004-03-30
  • 打赏
  • 举报
回复


"."表示当前目录
".."表示上一级目录

这东西就算在空目录里也存在,没用过DOS吗?

DeleteFile('f.name');???

这还没问题?

f.name 等同于 'f.name'???

FindFirst第二个参数的意思帮助上查不到吗?用0?
woodsway 2004-03-29
  • 打赏
  • 举报
回复
SearchRec.Name 里是不包含路径的,所以嘛...
加载更多回复(8)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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