Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.11.2006, 04:35
iMaGi iMaGi вне форума
Прохожий
 
Регистрация: 06.11.2006
Сообщения: 7
Репутация: 10
Вопрос Ошибка I/o 32 Удаление каталога...

Доброго времени суток....
У меня такая проблема....

Структура каталогов:
c:\555\новая папка
c:\555\DVD

получается так, когда я удаляю подпапки (новая папка и DVD) они удаляются, а вот когда дело доходит до удаления 555, тогда возникает ошибка, говорит что не могу удалить папку.....ПОчеМу???Алгоритм один и тот же, что и при удалении подкаталогов.

ПаМаГиТе!!!
Ответить с цитированием
  #2  
Старый 18.11.2006, 10:04
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Покажи алгоритм и может в 555 есть файл какой
Ответить с цитированием
  #3  
Старый 18.11.2006, 10:06
iMaGi iMaGi вне форума
Прохожий
 
Регистрация: 06.11.2006
Сообщения: 7
Репутация: 10
По умолчанию

В том то и дело....нет там никаких файлов....я проверял....программно через FindFirst и через explorer....
Ответить с цитированием
  #4  
Старый 18.11.2006, 10:07
iMaGi iMaGi вне форума
Прохожий
 
Регистрация: 06.11.2006
Сообщения: 7
Репутация: 10
По умолчанию

Когда делаю действие на кнопке RmDir('c:\555') удаляет и не возникает никакой ошибки....не могу понять причину....
Ответить с цитированием
  #5  
Старый 18.11.2006, 10:39
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Тогда, возможно, ошибка в твоем алгоритме
Ответить с цитированием
  #6  
Старый 18.11.2006, 10:57
iMaGi iMaGi вне форума
Прохожий
 
Регистрация: 06.11.2006
Сообщения: 7
Репутация: 10
По умолчанию

алгоритм...


function IsDirEmpty(sDirPath: String): Boolean;
var
fs: TSearchRec;
begin
Result := True;
sDirPath:= IncludeTrailingPathDelimiter(sDirPath);
if FindFirst(sDirPath+ '*.*', faAnyFile, fs) = 0 then
repeat
if (fs.Name <> '.') and (fs.Name <> '..') then
begin
Result := False;
FindClose(fs);
Exit;
end;
until FindNext(fs) <> 0;
FindClose(fs);
end;

....
if isDirEmpty(Path) then
RmDir(Path);
Ответить с цитированием
  #7  
Старый 12.01.2007, 11:09
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

Цитата:
Сообщение от iMaGi
алгоритм...


function IsDirEmpty(sDirPath: String): Boolean;
var
fs: TSearchRec;
begin
Result := True;
sDirPath:= IncludeTrailingPathDelimiter(sDirPath);
if FindFirst(sDirPath+ '*.*', faAnyFile, fs) = 0 then
repeat
if (fs.Name <> '.') and (fs.Name <> '..') then
begin
Result := False;
FindClose(fs);
Exit;
end;
until FindNext(fs) <> 0;
FindClose(fs);
end;

....
if isDirEmpty(Path) then
RmDir(Path);
Если я тебя понял то ты хочеш удалить папку тогда...
Самый легкий способ используй этот код ShellAPI
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  SHFileOpStruct : TSHFileOpStruct;
  From : array [0..255] of Char;
begin
  SetCurrentDirectory( PChar( 'C:\' ) );
  From := 'Test1.tst' + #0 + 'Test2.tst' + #0 + #0;{Сдесь приведен пример удаление 2 файлов тебе просто надо в кавычках написать путь к примеру для удаления папки  'c:\555\новая папка'+#0+'c:\555\DVD'+#0+#0 удаляет папку и ее содержимое}
  with SHFileOpStruct do
  begin
    Wnd := Handle;
    wFunc := FO_DELETE;
    pFrom := @From;
    pTo := nil;
    fFlags := 0;
    fAnyOperationsAborted := False;
    hNameMappings := nil;
    lpszProgressTitle := nil;
  end;
  SHFileOperation( SHFileOpStruct );
end;
--------------------------------
Если надо чтоб пользователь не выбирал действия поставь в
fFlags:=OF_NOCONFIRMATION {Отвечает для всех операций вместог пользователя Да}
Если надо удалить в корзину то пиши в флаге FOF_ALLOWUNDO
--------
Список и описание для флага операций
FOF_ALLOWUNDO Если возможно, сохраняет информацию для возможности UnDo.
FOF_CONFIRMMOUSE Не реализовано.
FOF_FILESONLY Если в поле pFrom установлено *.*, то операция будет производиться только с файлами.
FOF_MULTIDESTFILES Указывает, что для каждого исходного файла в поле pFrom указана своя директория - адресат.
FOF_NOCONFIRMATION Отвечает "yes to all" на все запросы в ходе опеации.
FOF_NOCONFIRMMKDIR Не подтверждает создание нового каталога, если операция требует, чтобы он был создан.
FOF_RENAMEONCOLLISION В случае, если уже существует файл с данным именем, создается файл с именем "Copy #N of..."
FOF_SILENT Не показывать диалог с индикатором прогресса.
FOF_SIMPLEPROGRESS Показывать диалог с индикатором прогресса, но не показывать имен файлов.
FOF_WANTMAPPINGHANDLE Вносит hNameMappings элемент. Дескриптор должен быть освобожден функцией SHFreeNameMappings.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter