о папке в подпапке с помощью vb.net - PullRequest
0 голосов
/ 06 марта 2012

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

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

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

Ответы [ 3 ]

1 голос
/ 06 марта 2012

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

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

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")
0 голосов
/ 06 марта 2012

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)
0 голосов
/ 06 марта 2012

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

  Directory.Delete(Path1, true)

MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...