不知道大家遇到过shellApi单元中的SHFileOperation函数不能删除名称是6个字母的文件夹的问题?

chenshu19791003 2005-05-25 01:35:30
最近写了一段代码 可是发现有点问题 请大家帮我看看,给个好的方法。
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吧:)。
...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellolongbin 2005-05-25
  • 打赏
  • 举报
回复
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;
myy 2005-05-25
  • 打赏
  • 举报
回复
pFrom 和 pTo 要求以 双 #0 结尾。
hellolongbin 2005-05-25
  • 打赏
  • 举报
回复
哦,忘了引用shellapi
楼主你说的问题跟空格没有关系,不信你可以在C盘下建一个带空格的文件夹然后删除试试
不过你说的问题确实存在,只限于program files下,而且文件名长度为6位的时候,并且我删除C:\Program Files\123456\123455也没问题,看来是微软确实对program files下长度为6的文件夹做了限制
hellolongbin 2005-05-25
  • 打赏
  • 举报
回复

怎么我再试的时候提示不认识TSHFileOpStruct了呢?是不是要引用什么单元?
chenshu19791003 2005-05-25
  • 打赏
  • 举报
回复
发现了一个问题就是要删除的目录的父级目录中不能包含空格。 这个问题怎么解决呀,大家帮忙呀?5555555555555
chenshu19791003 2005-05-25
  • 打赏
  • 举报
回复
晕死了 在俺同事的机器上试也不能删除呀。只要是在文件夹名中有且只有6个字符即不行,例如 文件夹名是 ‘123456’就不能删除了,提示说“无法删除文件:无法读源文件或磁盘”。到底是为什么呀
hellolongbin 2005-05-25
  • 打赏
  • 举报
回复
俺只是把btn换成了button……
hellolongbin 2005-05-25
  • 打赏
  • 举报
回复
报告楼主,俺试过了,俺机器上能删!

5,388

社区成员

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

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