Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не удаляется каталог функцией SHFileOperation. [D7, WinXP]


Страницы:   1 2

V.exeR ©   (2005-08-08 16:23:00) 

Ситуация такая: не удается удалить каталог функцией SHFileOperation. Пишет, что каталог используется какой-то программой. Удалять именно через SHFileOperation критично. Каталог абсолютно "левый" - не системный, не с программами, просто тестовый каталог. Единственный ньюанс - я перед этим рекурсивно просматриваю дерево каталогов, в который входит этот "неудаляемый" каталог. Но все FindFirstFile закрыты соответствующими FindClose, а других сложностей не вижу. Код привести сложно, но если приспичит - вырежу, опубликую. Кто-нибудь сталкивался с подобными трудностями? И если кто-нибудь сталкивался, как решали?

P.S. (Не)кстати - общий поиск по сайту не работает, причем довольно давно...


ANB   (2005-08-09 11:22:00) [21]


> V.exeR ©   (09.08.05 10:51) [4]
- нарывался я на схожую проблему. В конце концов сделал через RemoveDirectory и рекурсию. На форуме мастера подсказали, что :
1. В конце имени папки нужно лепить 2 #0.
2. Неплохо бы разделять путь двумя слешами (очень сомневался, но работать стало лучше).
Воспользоваться советами я не успел, так как уже все переписал.


V.exeR   (2005-08-09 10:51:00) [22]

2 Ботвин Дмитрий: и что скажешь?..


V.exeR   (2005-08-09 07:52:00) [23]

2 Fav: Возвращает код 32.
Привожу код...
tvLibrary - TTreeView, в нем строится копия дерева каталогов.


Procedure TMainForm.bDelDateClick(Sender: TObject);
Var Temp: String;
   SHFileOpStruct : TSHFileOpStruct;
Begin
 Temp:=ExcludeTrailingBackslash(ExtractFilePath(GetPath(tvLibrary.Selected)));
 If MessageDlg('Вы действительно хотите удалить подкаталог '+tvLibrary.Selected.Text+'?',mtWarning,[mbYes,mbNo],0)=mrYes Then
   Begin
     ChDir(AppDir);
     With SHFileOpStruct Do
     begin
       Wnd:=Handle;
       wFunc:=FO_DELETE;
       pFrom:=PChar(Temp);
       pTo:=nil;
       fFlags:=FOF_ALLOWUNDO;
       fAnyOperationsAborted:=False;
       hNameMappings:=nil;
       lpszProgressTitle:=nil;
     end;
     IntToStr(SHFileOperation(SHFileOpStruct));
     tvLibrary.Items.Clear;
     BuildTree(OpenDialog.InitialDir+'\DataBase\',nil);
   End;
End;


И BuildTree...


Procedure TMainForm.BuildTree(Path: String; Node: TTreeNode);
Var Found: Integer;
   SR: TWin32FindDataA;
   kk: Cardinal;
   FileName, Temp: String;
   NNode: TTreeNode;
Begin
 Found:=Windows.FindFirstFile(PChar(Path+'*.*'),SR);
 While Found>0 Do
 With SR Do
 Begin
   kk:=0;
   FileName:='';
   While cFileName[kk]>#0 Do
   Begin
     FileName:=FileName+cFileName[kk];
     Inc(kk);
   End;
   If (dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY=0) and ((UpperCase(ExtractFileExt(Filename))='.DAT') or (UpperCase(ExtractFileExt(Filename))='.TXT')) Then
   Begin
     Temp:=ExtractFileName(FileName);
     NNode:=tvLibrary.Items.AddChild(Node,Temp);
     NNode.SelectedIndex:=9;
     NNode.ImageIndex:=9;
     NNode.StateIndex:=9;
   End Else
   If (dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY>0) Then
   Begin
     If cFileName[0]<>'.' Then
     Begin
       NNode:=Node;
       Node:=tvLibrary.Items.AddChild(NNode,FileName);
       If Node.Level=0 Then
       Begin
         Node.SelectedIndex:=7;
         Node.ImageIndex:=7;
         Node.StateIndex:=7;
       End Else
       Begin
         Node.SelectedIndex:=8;
         Node.ImageIndex:=8;
         Node.StateIndex:=8;
       End;
       BuildTree(Path+FileName+'\',Node);
       Node:=NNode;
     End;
   End;
   if not FindNextFile(Found,SR) then Found:=0;
 End;
 Windows.FindClose(Found);
End;


Fay   (2005-08-08 17:05:00) [24]

2 V.exeR   (08.08.05 16:23)
Что возвращает SHFileOperation?


Ботвин Дмитрий   (2005-08-08 17:03:00) [25]

Приводи код...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо