无法使用deletefile命令删除文件夹

时间:2009-09-23 11:59:08

标签: delphi

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not deletefile('c:\test') then
  raiselastoserror
end;

procedure TForm1.Button1Click(Sender: TObject); begin if not deletefile('c:\test') then raiselastoserror end;

我得到操作系统错误5:访问被拒绝 当我使用相同的代码删除文件说wwj.txt它工作正常,但不适用于文件夹我做错了什么?

4 个答案:

答案 0 :(得分:5)

请改用RemoveDir()程序。确保它不是您的应用程序的当前目录,或任何其他目录,或者它将保留。必须使用SysUtils才能获得该功能。

如果需要,请先删除目录内容(如下)。可以递归删除,并考虑'。'的含义。测试您是否使用带有'。'的目录或文件。

procedure DeleteFiles( szDBDirectory : string );
var
    szFile : string;
    SearchRec: TSearchRec;
    szSearchPath : string;
    nResult : integer;
begin
    szSearchPath := szDBDirectory;
    nResult := FindFirst(szSearchPath + '\*.*', faAnyFile, SearchRec);
    try
        while 0 = nResult do
        begin
            if('.' <> SearchRec.Name[1]) then
            begin
                szFile := szSearchPath + '\' + SearchRec.Name;
{$IFDEF DEBUG_DELETE}
                CodeSite.Send('Deleting "' + szFile + '"');
{$ENDIF}
                FileSetAttr(szFile, 0);
                DeleteFile(szFile);
            end;

            nResult := FindNext(SearchRec);
        end;
    finally
        FindClose(SearchRec);
    end;
end;

答案 1 :(得分:3)

您可以使用shell函数。根据{{​​3}},这将删除非空文件夹,即使它们包含子文件夹:

uses ShellAPI;
Function DelTree(DirName : string): Boolean;
var
  SHFileOpStruct : TSHFileOpStruct;
  DirBuf : array [0..255] of char;
begin
  try
   Fillchar(SHFileOpStruct,Sizeof(SHFileOpStruct),0) ;
   FillChar(DirBuf, Sizeof(DirBuf), 0 ) ;
   StrPCopy(DirBuf, DirName) ;
   with SHFileOpStruct do begin
    Wnd := 0;
    pFrom := @DirBuf;
    wFunc := FO_DELETE;
    fFlags := FOF_ALLOWUNDO;
    fFlags := fFlags or FOF_NOCONFIRMATION;
    fFlags := fFlags or FOF_SILENT;
   end; 
    Result := (SHFileOperation(SHFileOpStruct) = 0) ;
   except
    Result := False;
  end;
end;

答案 2 :(得分:3)

您可以使用Windows API中的SHFileOperation函数。 ShellApi中定义了对它的引用。但是,我建议您查看Jedi Code Library。单元JclFileUtils包含一个DeleteDirectory函数,它更容易使用;它甚至可以选择将已删除的目录发送到回收站。

答案 3 :(得分:2)

你做错了是使用DeleteFile删除不是文件的内容。 The documentation建议你:

  

文档没有明确告诉您不要在目录上使用DeleteFile,但是其他两条指令暗示了它。