文件的删除

supershan 1999-12-29 10:26:00
如果要删除一个目录,并且此目录下还有许多文件,要一起删除,请问用什么函数!
...全文
370 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
supershan 2000-01-06
  • 打赏
  • 举报
回复
fish的回答比较满意可以为你加分!
fish 2000-01-06
  • 打赏
  • 举报
回复
删除一子目录及其下面的文件
procedure TForm1.Button1Click(Sender: TObject);
var
DirInfo: TSearchRec;
r : Integer;
begin
r := FindFirst('C:\Download\Test\*.*', FaAnyfile, DirInfo);
while r = 0 do
begin
if ((DirInfo.Attr and FaDirectory<>FaDirectory) and
(DirInfo.Attr and FaVolumeId<>FaVolumeID)) then
if DeleteFile(pChar('C:\Download\test\' + DirInfo.Name)) = false then
ShowMessage('Unable to delete : C:\Download\test\' + DirInfo.Name);
r := FindNext(DirInfo);
end;
SysUtils.FindClose(DirInfo);
if RemoveDirectory('C:\Download\Test') = false then
ShowMessage('Unable to delete direcotry : C:\Download\test');
end;
zyb 2000-01-06
  • 打赏
  • 举报
回复
定义一个TSEARCHRECT变量,然后用findfirst,findnext遍历目录,然后用deletefile(filename)即可删除该目录下的所有文件。似乎没有什么更好的方法!
tide 2000-01-02
  • 打赏
  • 举报
回复
following code may help u:


--------------------------------------------------------------------------------

program del;

uses
ShellApi;

//function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;

Var T:TSHFileOpStruct;
P:String;
begin
P:='C:\Windows\System\EL_CONTROL.CPL';
With T do
Begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=Pchar(P);
fFlags:=FOF_ALLOWUNDO
End;
SHFileOperation(T);
End.
--------------------------------------------------------------------------------
There are some other quirks you should be aware of, too:

Give the complete file path for every file specified. Do not rely on the current directory, even if you change to it right before the call. The SHFileOperation API is not "smart" enough to use the current directory if one is not given for undo information. So, even if you give the FOF_ALLOWUNDO flag, it will not move deleted files to the recycle bin because it doesn't know what path they came from, and thus couldn't restore them to their original location from the recycle bin. It will simply delete the file from the current directory.

MS has a documentation correction about the pFrom member. It says that for multiple files, each filename is seperated by a NULL (#0) character, and the whole thing is terminated by double NULLs. You need the double NULL whether or not you are passing multiple filenames. Sometimes it will work correctly without them, but often not. That's because sometimes you get lucky and the memory following the end of your string has a NULL there.

An example of how to do this would be:

var
FileList: string;
FOS: TShFileOpStruct;
begin
FileList := 'c:\delete.me'#0'c:\windows\temp.$$$'#0#0;
{ if you were using filenames in string variables: }
FileList := Filename1 + #0 + Filename2 + #0#0;

FOS.pFrom := PChar(FileList);

// blah blah blah
end;
sleet 1999-12-30
  • 打赏
  • 举报
回复
现成函数没有。可以考虑调用外部程序。Windows 95/98和Dos中可用Deltree/y [目录名],NT中用rd/s/q [目录名],可以保证完全删除(NT下正在使用的文件不能删除,与之对应的子目录及父目录不能删除。)
chenzhuangyuan 1999-12-29
  • 打赏
  • 举报
回复
用CFileFind类,遍历目录查找文件,再删除 Remove(FileName)。
jiangtao 1999-12-29
  • 打赏
  • 举报
回复
Use Findfirst,FindNext 遍历目录,
the use RemoveFile to delete files you find
Bobo 1999-12-29
  • 打赏
  • 举报
回复
var str string
winexec(deltree str)
zdg 1999-12-29
  • 打赏
  • 举报
回复
好像没有现成的函数, 需要用遍历删除...
kxy 1999-12-29
  • 打赏
  • 举报
回复
遍历,再删除
www.midatech/jiangtao下有TFileFinder的控件Open Source,我放的,
用ftp工具可以下载.此控件很好用:)

5,379

社区成员

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

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