最近写了一段代码 可是发现有点问题 请大家帮我看看,给个好的方法。
procedure TForm1.btn1Click(Sender: TObject);
Var
  T:TSHFileOpStruct;
  P:String;
begin
  P:='C:\Program Files\ariwkk';
  With T do
  Begin
    Wnd:=0;
    wFunc:=FO_DELETE;
    pFrom:=Pchar(P);
    pTo:=nil;
    fFlags:=FOF_MULTIDESTFILES+FOF_NOCONFIRMATION;
    hNameMappings:=nil;
    lpszProgressTitle:='正在删除文件夹\';
    fAnyOperationsAborted:=False;
  End;
  SHFileOperation(T);
end;P:='C:\Program Files\ariwkk'; 这里的文件夹名称中不能有6个字符  1,2,3,4,5,7等我都试过了没有问题? 这到底是什么原因呀。不能是微软的人讨厌了6吧:)。

解决方案 »

  1.   


    怎么我再试的时候提示不认识TSHFileOpStruct了呢?是不是要引用什么单元?
      

  2.   

    哦,忘了引用shellapi
    楼主你说的问题跟空格没有关系,不信你可以在C盘下建一个带空格的文件夹然后删除试试
    不过你说的问题确实存在,只限于program files下,而且文件名长度为6位的时候,并且我删除C:\Program Files\123456\123455也没问题,看来是微软确实对program files下长度为6的文件夹做了限制
      

  3.   

    pFrom 和 pTo 要求以 双 #0 结尾。
      

  4.   

    removedir('C:\Program Files\123456');
    可以删除掉
    但是这个命令只能删除空文件夹
    要删除文件夹及里面的内容的话:
    procedure deltree(nowpath: string);
    var
      search:TSearchRec;
      ret:integer;
      key:string;
    begin
      if NowPath[Length(NowPath)]<>'\' then
       NowPath:=NowPath+'\';
      key:=Nowpath+'*.*';
      ret:=findFirst(key,faanyfile,search);
      while ret=0 do begin
       if ((search.Attr and fadirectory)= faDirectory)
        then begin
          if (Search.Name <>'.') and (Search.name<>'..') then
         Deltree(NowPath+Search.name);
        end else begin
         if ((search.attr and fadirectory)<> fadirectory) then begin
           deletefile(NowPath+search.name);
          end;
        end;
        ret:=FindNext(search);
      end;
      findClose(search);
      removedir(NowPath);
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    deltree('C:\Program Files\123456');
    end;