Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Удалить непустую директорию / 11 сообщений из 11, страница 1 из 1
29.09.2014, 12:53
    #38760509
valery500
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить непустую директорию
Добрый день! Пытаясь удалить непустую папку размером 0 байт, да и вообще, с любым размером RMDIR даёт ошибку доступа. Помогите, пожалуйста, решить проблему.
...
Рейтинг: 0 / 0
29.09.2014, 13:02
    #38760529
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить непустую директорию
valery500Пытаясь удалить непустую папкунепустую папку нельзя удалить.
...
Рейтинг: 0 / 0
29.09.2014, 22:23
    #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
30.09.2014, 00:45
    #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
30.09.2014, 23:27
    #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
30.09.2014, 23:52
    #38762723
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить непустую директорию
iMrTidy,

>Set wrd =
>Set doc =

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

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

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

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

16146341

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

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


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

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

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


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