2012-03-06 97 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") 
相关问题