Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - ASP и VBScript

Страница: 1 |

 

  Вопрос: VBS: Обход удаления используемых файлов Добавлено: 20.01.10 11:33  

Автор вопроса:  Lnduk
В общем проблема следующая: есть момент в скрипте, который удаляет файлы и подпапки из заданной директории. Однако в ней могут находиться файлы, которые используются/открыты в настоящее время. Нужно, чтобы удалились только неиспользуемые, а блокируемые/используемые файлы он оставил.
Я новичок в VBS, поэтому использовал следующую конструкцию:

'uProf - заданная папка в которой необходимо произвести такую выборочную зачистку
If oFSO.FolderExists(uProf) = true then
   oFSO.DeleteFolder uProf & "\*", 0
   oFSO.DeleteFile uProf & "\*", 0
end if

Однако при нахождении используемого файла - выдается ошибка "разрешение отклонено". Как лучше сделать? Можно конечно прописать On Error Resume Next ... , но может есть изящнее варианты?

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Шпион



ICQ: 250543104 

Вопросов: 13
Ответов: 118
 Профиль | | #1 Добавлено: 20.01.10 12:16
зря недооцениваешь возможности On Error Resume Next

рекомендую гуглить в сторону

Err.Clear
Err.Number
Err.Description

Ответить

Номер ответа: 2
Автор ответа:
 Шпион



ICQ: 250543104 

Вопросов: 13
Ответов: 118
 Профиль | | #2 Добавлено: 20.01.10 12:24
Кстати, раз уж пошла такая резня бензопилой:
Думаю - разберешься
Такая конструкция точно сработает. Если не нужны дополнительные проверки файла - удалишь. Ну и On Error Resume Next тоже напишешь если понадобится


strFolder="c:\Windows\temp"
If right(strFolder,"\";)="\" Then strFolder=left(strFolder,len(strFolder)-1)
Set objFSO=Createobject("Scripting.Filesystemobject";)
Set objFolder=objFSO.GetFolder
Set objFiles=objFolder.Files
For Each objFile In objFiles
a=split(ucase(objFile.Name), ".";)
strExtension=a(ubound(a))
strFileName=ucase(Left(objFile.Name,len(objFile.Name)-len(strExtension))
If strExtension=".TMP" Then objFSO.DeleteFile strFolder & "\" & objFile.Name, True
Next

Ответить

Номер ответа: 3
Автор ответа:
 Шпион



ICQ: 250543104 

Вопросов: 13
Ответов: 118
 Профиль | | #3 Добавлено: 20.01.10 12:25
фикс (из-за смайлов):
a=ubound( a )

Ответить

Номер ответа: 4
Автор ответа:
 Lnduk



Вопросов: 1
Ответов: 2
 Профиль | | #4 Добавлено: 25.01.10 09:41
ок. Попробую...

Ответить

Номер ответа: 5
Автор ответа:
 Lnduk



Вопросов: 1
Ответов: 2
 Профиль | | #5 Добавлено: 27.01.10 09:16
блин, есть проблема, написал следующее:
  1.  
  2. IF oFSO.FolderExists(arrTMPflds(i)) = true then
  3.    oFSO.DeleteFolder arrTMPflds(i) & "\*", 0
  4.    Set oFolder=oFSO.GetFolder(arrTMPflds(i))
  5.    Set oFiles=oFolder.Files
  6.    For Each oFile In oFiles
  7.       On Error Resume Next
  8.       oFSO.DeleteFile arrTMPflds(i) & "\" & oFile.Name, 0
  9.    Next
  10. END IF


Все вроде работает, однако появилось 2 момента:
1.
  1. oFSO.DeleteFolder arrTMPflds(i) & "\*", 0
- удаляет не полностью, если в подпапках имеются используемые файлы - остается вся папка, плюс к этому далеко не все папки удаляются хотя там все хорошо... Почему?
2.
  1. oFSO.DeleteFile arrTMPflds(i) & "\" & oFile.Name, 0
- тоже удаляются не все файлы, хотя не используются и все разрешения есть (аттрибуты чистые).

Ответить

Номер ответа: 6
Автор ответа:
 Шпион



ICQ: 250543104 

Вопросов: 13
Ответов: 118
 Профиль | | #6 Добавлено: 27.01.10 09:35
давай проверим. создай папку C:\TEMP
в ней файл с произвольным именем
подпапку 123, внутри файл aaa
подпапку 321, внутри файл bbb
после этого скопируй скрипт, выполни и посмотри результаты выполнения в папке C:\TEMP

On Error Resume Next
strFolder="C:\TEMP"
Set objFSO=Createobject("Scripting.Filesystemobject";)
Set objFolder=objFSO.GetFolder(strFolder)
Set objFiles=objFolder.Files
For Each objFile In objFiles
objFSO.DeleteFile strFolder & "\" & objFile.Name, True
Next
For Each objSubFolder In objFolder.SubFolders
Wscript.Echo objSubFolder.Name
objFSO.DeleteFolder strFolder & "\" & objSubFolder.Name
Next



будут вопросы - пиши письма

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам