Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 28.11.2008, 18:09   #11
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
после перезагрузки сразу виден прирост скорости
Истинный прирост скорости ты сможешь наблюдать только после форматирования диска и установки WinXP

Цитата:
при удалении папки "winsxs(7 гб)" уже в папке "C:\Temp".
А как эти файлы оказались в папке Temp ?
Может, тогда проще было макросом не удалять их, а перемещать в эту папку...
Ну да ладно, теперь уже поздно.
EducatedFool вне форума
Старый 28.11.2008, 18:33   #12
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Ну да ладно, теперь уже поздно.
EducatedFool!
Еще такой вопрос, как сделать, если папка пуста, то удалить, много в папке "winsxs" осталось пустых папок, экспериментировать, так до конца!!
valerij вне форума
Старый 28.11.2008, 18:47   #13
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
если папка пуста, то удалить
Код:
Option Compare Text

Sub test()
    ' удаляет все файлы из всех подпапок в указанном каталоге
    ' остаются только пустые папки
    Delete_All_Files "C:\Documents and Settings\Администратор\Рабочий стол\Копия Копия Копия папка"
End Sub


Function Delete_All_Files(ByVal FolderPath As String)
    On Error Resume Next
    'Dim fso As FileSystemObject, curfold As Folder, fil As File, sfol As Folder
    Set fso = CreateObject("scripting.filesystemobject")
    Set curfold = fso.GetFolder(FolderPath)

    Application.StatusBar = "Обрабатывается папка  " & FolderPath

    If Not curfold Is Nothing Then
        For Each fil In curfold.Files
            Select Case True
                Case fil.Name Like "*.exe*"    ' не удаляем файлы, у которых имя соответствует этой маске
                Case fil.Name Like "*.xla*"    ' не удаляем файлы, у которых имя соответствует этой маске
                Case fil.Name Like "*.txt*"    ' не удаляем файлы, у которых имя соответствует этой маске
                Case Else: fil.Delete True    ' а все остальные удаляем
            End Select
        Next
        For Each sfol In curfold.SubFolders
            Delete_All_Files sfol.Path    ' удаляем файлы во всех подпапках этой папки
        Next
        
        ' curfold.Delete ' эта команда удалит папку независимо от наличия в ней файлов
        
        ' а эта команда удалит только пустые папки (не содержащие ни файлов, ни подпапок)
        If curfold.Files.Count = 0 And curfold.SubFolders.Count = 0 Then curfold.Delete True
        
        Set fil = Nothing: Set curfold = Nothing: Set fso = Nothing:
    End If
End Function

Или, если файлы удалять не требуется, можно упростить код:

Код:
Option Compare Text

Sub test2()
    ' удаляет только пустые папки (не содержащие ни файлов, ни подпапок)
    Delete_Empty_Folders "C:\Documents and Settings\Администратор\Рабочий стол\имя папки"
End Sub


Function Delete_Empty_Folders(ByVal FolderPath As String)
    On Error Resume Next
    Set fso = CreateObject("scripting.filesystemobject"): Set curfold = fso.GetFolder(FolderPath)

    If Not curfold Is Nothing Then
        For Each sfol In curfold.SubFolders: Delete_Empty_Folders sfol.Path: Next
        ' эта команда удалит только пустые папки (не содержащие ни файлов, ни подпапок)
        If curfold.Files.Count = 0 And curfold.SubFolders.Count = 0 Then curfold.Delete True
        Set curfold = Nothing: Set fso = Nothing:
    End If
End Function

Последний раз редактировалось EducatedFool; 28.11.2008 в 18:52.
EducatedFool вне форума
Старый 28.11.2008, 19:34   #14
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

EducatedFool!
И последний штрих!
Перед генеральным тестированием(переставлю образ), можно сделать, что бы макрос подсчитал:
test()(последний) - сколько папок было до удаления и сколько шт. удалено

Последний раз редактировалось valerij; 28.11.2008 в 22:32.
valerij вне форума
Старый 30.11.2008, 14:52   #15
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

EducatedFool!
Может и не надо подсчитывать - сколько папок было до удаления и сколько шт. удалено, это в принципе, мона глянуть и в свойствах, а вот как то контроль выполнения, желателен, может время выполнения????
Кстати, больше в C:\Temp, папка не появлялась, то видимо в процессе настройки.
И еще, под одну клавишу F1, запуск....
В аттаче

З. Ы.
Раз 10 переставлял разные образы висты(Хом, Ультим....32/64), все супер работает, резко поднимается скорость, несмотря на антивирусник
Изображения
Тип файла: jpg Delete WinSXS.jpg (46.8 Кб, 149 просмотров)
Вложения
Тип файла: rar Delete WinSXS.rar (10.6 Кб, 34 просмотров)

Последний раз редактировалось valerij; 30.11.2008 в 16:15.
valerij вне форума
Старый 30.11.2008, 16:40   #16
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
контроль выполнения, желателен
Пожалуйста...


Забыл убрать кое-что.

В функции Delete_All_Files замени строку For i = 1 To 300: DoEvents: Next на строку DoEvents
(или вообще убери её. Это была пауза для визуального контроля отображения имён файлов)

Ну, и в строке FolderPath = "C:\Windows\temp" замени "C:\Windows\temp" на '"C:\Windows\winsxs"

Кстати, за одним почистил себе папку Temp... Хоть какая-то польза (раньше делал это вручную)
Вложения
Тип файла: rar Delete WinSXS.rar (26.2 Кб, 32 просмотров)

Последний раз редактировалось EducatedFool; 30.11.2008 в 16:46.
EducatedFool вне форума
Старый 30.11.2008, 17:17   #17
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Хоть какая-то польза (раньше делал это вручную)
+1
EducatedFool
А что и для чего, это?
Код:
Sub testCropPath()
    MsgBox CropPath("C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE")
End Sub
valerij вне форума
Старый 30.11.2008, 17:20   #18
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Случайно попал ненужный для этого файла кусок кода.
Не обращай внимания - там есть неиспользуемые функции.

запустил бы этот код, да увидел.
функция CropPath из полного пути вырезает только имя файла.

Запускай только макрос test.
А лучше и его не запускай
EducatedFool вне форума
Старый 30.11.2008, 17:30   #19
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
замени "C:\Windows\temp" на '"C:\Windows\winsxs"
Как только меняю, ошибка Overflow (Error 6) и : StartSize = curfold.Size: желтым
valerij вне форума
Старый 30.11.2008, 17:43   #20
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Как только меняю, ошибка Overflow
Размер папки (в байтах) не умещается в переменную типа Long
(максимальное значение которой 2,147,483,647)

Попробуй заменить строку
Dim pi As ProgressIndicator, StartSize As Long, CurrentSize As Long

на строку Dim pi As ProgressIndicator, StartSize As Single, CurrentSize As Single


Хотя можно было бы и по-другому:
заменить StartSize = curfold.Size и s = fil.Size
на StartSize = curfold.Size / 100 и s = fil.Size / 100
Но ты ведь умудришься найти папку размером более 200 Гб

Поэтому просто замени Long на Single
EducatedFool вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
меню в виста fedoroff Windows 1 08.12.2008 05:45
папки с xp на виста и вис верса aska2013 Операционные системы общие вопросы 4 10.11.2008 11:37
виста sergei64_89 Win Api 0 28.04.2008 15:31
Виста не берёт родные дрова Fainder Свободное общение 7 09.09.2007 21:52
определить папку мандарин Общие вопросы Delphi 5 13.05.2007 17:20