powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Удалить непустую директорию
11 сообщений из 11, страница 1 из 1
Удалить непустую директорию
    #38760509
valery500
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Пытаясь удалить непустую папку размером 0 байт, да и вообще, с любым размером RMDIR даёт ошибку доступа. Помогите, пожалуйста, решить проблему.
...
Рейтинг: 0 / 0
Удалить непустую директорию
    #38760529
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valery500Пытаясь удалить непустую папкунепустую папку нельзя удалить.
...
Рейтинг: 0 / 0
Удалить непустую директорию
    #38761326
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valery500,

Из справки RmDir:

An error occurs if you try to use RmDir on a directory or folder containing files. Use the Kill statement to delete all files before attempting to remove a directory or folder.

Возможно Вам пригодится такой метод:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Option Explicit

Sub TestDeleteFolder()

Dim res As Boolean
res = DeleteFolder("d:\temp\123")
Debug.Print res

End Sub

Private Function DeleteFolder(FolderPath As String) As Boolean

Dim fso As Object

Set fso = CreateObject("Scripting.FileSystemObject")

FolderPath = fso.GetAbsolutePathName(FolderPath)
If fso.FolderExists(FolderPath) Then
    fso.DeleteFolder FolderPath, True
    DeleteFolder = True
End If

Set fso = Nothing

End Function
...
Рейтинг: 0 / 0
Удалить непустую директорию
    #38761373
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valery500,

Лично я в этом вопросе ни в API ни в рекурсии не лез:

Код: vbnet
1.
  Shell "cmd /c RD /S /Q " & Chr(34) & App.Path & "\Data\" & Chr(34), vbHide



Набери в командной строке rd /?


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
C:\Users\Dmitry>rd /?
Удаление каталога.

RMDIR [/S] [/Q] [диск:]путь
RD [/S] [/Q] [диск:]путь

    /S      Удаление дерева каталогов, т. е. не только указанного каталога,
            но и всех содержащихся в нем файлов и подкаталогов.

    /Q      Отключение запроса подтверждения при удалении дерева каталогов
            с помощью ключа /S.

C:\Users\Dmitry>
...
Рейтинг: 0 / 0
Удалить непустую директорию
    #38762704
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Возможно, подход с использованием функции Shell не всегда целесообразен. Например, в этом случае папка удалена не будет и результат будет неизвестен:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Option Explicit

Sub TestShellDelete()

Dim wrd As Object
Dim doc As Object
Dim sPath As String
Dim sDoc As String

sPath = "d:\temp\123\"
sDoc = "1.docx"

Set wrd = CreateObject("Word.Application")
wrd.Visible = True
Set doc = wrd.Documents.Add
doc.SaveAs2 sPath & sDoc

Shell ("cmd /c RD /S /Q " & Chr(34) & sPath & Chr(34))

End Sub
...
Рейтинг: 0 / 0
Удалить непустую директорию
    #38762723
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

>Set wrd =
>Set doc =

А word с открытым файлом кто за вас закрывать будет?

Что-то у вас там не так.
...
Рейтинг: 0 / 0
Удалить непустую директорию
    #38762755
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Word я не закрываю намеренно, чтобы продемонстрировать наглядно результат, в случае, если в удаляемой папке будет находиться открытый файл.
...
Рейтинг: 0 / 0
Удалить непустую директорию
    #38762799
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

Ты умничаешь?
Нельзя удалить файл который используется кем-то в данный момент.
И соответственно папку его содержащую тоже.
Ни ручками, ни программно.
Вот тебе кстати пример как я с этим буквально напоролся.

16146341

И кстати там же найдешь мою культурную функцию ShellDeleteFileFolder (под спойлером),
которая удаляет папку с файлами,
при этом не использует VB-шный Shell и cmd, а использует API SHFileOperation function
Таки сделал я это через API, просто с ходу не вспомнил.

Твой fso.DeleteFolder очевидно делает то же самое и через ту же API, просто я "с детства" и со времен Win98 недолюбливаю "Scripting.FileSystemObject" и принципиально не использую.
...
Рейтинг: 0 / 0
Удалить непустую директорию
    #38762802
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>папка удалена не будет и результат будет неизвестен
Тогда моя ShellDeleteFileFolder вернет false.
И, кстати, если ты раскомментируешь в моей ф-ции строчку
Код: vbnet
1.
2.
 dwRes = SHFileOperation(SHFileOp)
  'If dwRes <> 0 Then Debug.Print "SHFileOperation Error " & CStr(dwRes)


то он тебе распечатает ошибку, почему не удалось удалить папку.
...
Рейтинг: 0 / 0
Удалить непустую директорию
    #38762817
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy...чтобы продемонстрировать наглядно результат, в случае, если в удаляемой папке будет находиться открытый файл.
Ну по сути вы то же что и я написали.
Другое дело, что от того что вы узнаете почему не удалилось,
вам как правило легче не станет.
Поэтому лично я предпочитаю не перегружать код обработкой ошибок (часто бесполезной), а заранее в коде предопределять условия при которых такой ситуации не произойдет, а потом удалять без проверок.

Автору топика я бы посоветовал попробовать удалить ручками и выяснить почему не удаляется,
а потом уже чего-то программировать.
М.б. файл где-то открыт, м.б. нет прав доступа.
М.б. вообще битый кластер на жестком диске (тогда скандиск) -я с такой ситуацией сталкивался.
...
Рейтинг: 0 / 0
Удалить непустую директорию
    #38762870
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valery500даёт ошибку доступа
Если у текущего пользователя нет прав на удаление папки, то тебе грубо надо:
1) Запустить прогу с правами администратора
2) Проверить есть ли у администратора права на удаление, если есть то удалить папку
3) Если прав нет, то проверить, является ли администратор владельцем папки, если да, то дать ему право на удаление и удалить папку
4) Если не является владельцем, то сменить владельца на администратора, дать администратору права на удаление и удалить

Ты хотя б на уровне "ручками" с этим разберись.
Коды которые все это делают программно на VB6 у меня конечно есть, но тратить время на выкладывание их считаю бессмысленным так как вряд ли осилишь. Их куски есть если пошерстишь поиском по моим топикам.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Удалить непустую директорию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]