2012-03-06 3 views
0

Я хочу удалить все папки под корневым каталогом. Папка e: \ trichy.root содержит также подпапку, например файлы e: \ trichy \ chn \ 20008 \ 20204 * .mp3. PLS помочь мне. всегда получая ошибку.о папке под вложенной папкой, используя vb.net

Dim rootfolder1 As FileInfo 
    rootfolder1 = txtRootFolder.Text 

    Try 
     If Directory.Exists(rootfolder1) Then 

      Dim files() As String = Directory.GetDirectories(rootfolder1) 
      For Each file As String In files 
       Dim fi As FileInfo = New FileInfo(file) 
       If (fi.LastAccessTime < DateTime.Now.AddMonths(-3)) Then 
        fi.Delete() 
        display_status("files are deleted successfully") 
       End If 
      Next 
     End If 
    Catch ex As Exception 
     display_status("Error in file deletion" & ex.Message) 
    End Try 

Помогите мне удалить файлы под этой корневой папкой в ​​подпапках?

+0

какая ошибка адресности? – FosterZ

+2

Почему вы не опубликовали данные об ошибке? Должны ли мы гадать? – Oded

ответ

0

Удаляет указанный каталог и, если указано, любые подкаталоги и файлы в каталоге.

Directory.Delete(Path1, true) 

MSDN

+0

Но он хочет удалить только файлы старше 3 месяцев. –

+0

его заголовок вопроса был запутанным и 'я хочу удалить все под корневой папкой' тоже, теперь я его получаю – FosterZ

0

Directory.GetDirectories возвращает все суб-каталоги. Затем вы создаете из него объекты FileInfo.

Я предполагаю, что вы вместо этого хотите удалить файлы в этой папке, чем вам нужно использовать Directory.GetFiles:

Dim files() As String = Directory.GetFiles(rootfolder1) 
For Each file As String In files 
    Dim fi As FileInfo = New FileInfo(file) 
    If (fi.LastAccessTime < DateTime.Now.AddMonths(-3)) Then 
     fi.Delete() 
    End If 
Next 
display_status("files are deleted successfully") 

Если вы хотите удалить все файлы во всех вложенных папках рекурсивно:

Public Shared Sub ProcessDirectory(ByVal targetDirectory As String) 
    Dim fileEntries As String() = Directory.GetFiles(targetDirectory) 
    Dim fileName As String 
    For Each fileName In fileEntries 
     Dim fi As FileInfo = New FileInfo(fileName) 
     If (fi.LastAccessTime < DateTime.Now.AddMonths(-3)) Then 
      fi.Delete() 
     End If 
    Next fileName 

    Dim subdirectoryEntries As String() = Directory.GetDirectories(targetDirectory) 
    ' Recurse into subdirectories of this directory. 
    Dim subdirectory As String 
    For Each subdirectory In subdirectoryEntries 
     ProcessDirectory(subdirectory) 
    Next subdirectory 
End Sub 

Вы назвали бы это:

ProcessDirectory(rootfolder1) 
1

Вам не нужен FileInfo OBJE cts вообще. Я не тестировал, но это может быть просто ненужная трата или ресурсы и дорогостоящая производительность.

Попробуйте это:

Private Sub DeleteOldFiles(ByVal rootFolder As String, ByVal uptoDate As Date, Optional ByVal fileTypes As String = "*.*") 
    Try 
     If Directory.Exists(rootFolder) Then 
      Dim files() As String = Directory.GetFiles(rootFolder, fileTypes, SearchOption.AllDirectories) 
      For Each f As String In files 
       If File.GetLastAccessTime(f) <= uptoDate Then 
        File.Delete(f) 
       End If 
      Next 
     End If 
     display_status("files are deleted successfully") 
    Catch ex As Exception 
     display_status("Error in file deletion" & ex.Message) 
    End Try 
End Sub 

Использование:

DeleteOldFiles(txtRootFolder.Text, Now.AddMonths(-3), "*.mp3") 
Смежные вопросы