2012-03-06 128 views
0

我想刪除根目錄下的所有文件夾e:\ trichy.root文件夾也包含子文件夾,如e:\ trichy \ chn \ 20008 \ 20204 * .mp3文件。請幫助我 。總是出現錯誤。關於使用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 2012-03-06 11:55:18

+2

你爲什麼不發佈錯誤細節?我們應該猜測嗎? – Oded 2012-03-06 11:55:43

回答

0

刪除指定的目錄,如果指示,則刪除目錄中的任何子目錄和文件。

Directory.Delete(Path1, true) 

MSDN

+0

但他只想刪除3個月以上的文件。 – 2012-03-06 12:08:58

+0

他的問題標題很混亂,我也想刪除根目錄下的所有文件夾,現在我明白了 – FosterZ 2012-03-06 12:17:38

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完全可以。我還沒有測試過,但它可能只是一種不必要的浪費或資源,而且性能價格昂貴。

試試這個:

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") 
相關問題