2016-08-04 98 views
0

我有一個按鈕控件的代碼刪除所有文件,除了3個文件VB.NET

Private Sub DeleteOldFiles(
     ByVal AsDirectoryName As String, 
     ByVal AbDeleteSubDirectories As Boolean, 
     ByVal AbDeleteFolders As Boolean) 

     If AbDeleteSubDirectories Then 
      Dim m_sSubdirectoryName As String 

      For Each m_sSubdirectoryName In 
      System.IO.Directory.GetDirectories(AsDirectoryName) 
       DeleteOldFiles _ 
        (m_sSubdirectoryName, 
        AbDeleteSubDirectories, 
        AbDeleteFolders) 

       If AbDeleteFolders Then 
        System.IO.Directory.Delete(m_sSubdirectoryName) 
       End If 
      Next 
     End If 

     Dim m_sFileName As String 

     For Each m_sFileName In 
     System.IO.Directory.GetFiles(AsDirectoryName) 
      If m_sFileName <> "p2ptv_preview01.zip" Then 
       System.IO.File.Delete(m_sFileName) 
      End If 
     Next 

和DeleteOldFiles( 「./」,真,真)。 但是,此代碼僅適用於一個文件。 我想除了更多的文件。 我該怎麼做?

+0

它只是刪除一個文件和其他文件不' 「p2ptv_preview01.zip」'?只是爲了進行實驗,當你用類似'DeleteOldFiles(「c:\ temp」,True,True)的臨時路徑運行此代碼時會發生什麼情況' –

回答

2

只需傳入您不想刪除的豁免文件列表,並查看當前文件名是否在該列表中。

Private Sub DeleteOldFiles(
    ByVal AsDirectoryName As String, 
    ByVal AbDeleteSubDirectories As Boolean, 
    ByVal AbDeleteFolders As Boolean, 
    ByVal exemptFileNames As IEnumerable(Of String)) 

    If AbDeleteSubDirectories Then 
     Dim m_sSubdirectoryName As String 

     For Each m_sSubdirectoryName In 
     System.IO.Directory.GetDirectories(AsDirectoryName) 
      DeleteOldFiles _ 
       (m_sSubdirectoryName, 
       AbDeleteSubDirectories, 
       AbDeleteFolders, 
       exemptFileNames) 

      If AbDeleteFolders Then 
       System.IO.Directory.Delete(m_sSubdirectoryName) 
      End If 
     Next 
    End If 

    Dim m_sFileName As String 

    For Each m_sFileName In 
    System.IO.Directory.GetFiles(AsDirectoryName) 
     If exemptFileNames.Contains(m_sFileName) Then 
      Console.WriteLine("Skipped " & m_sFileName) 
     Else 
      System.IO.File.Delete(m_sFileName) 
     End If 
    Next 
End Sub 

用法:

Sub Main() 
    Dim exemptFilenames As New List(Of String)() 
    exemptFilenames.Add("p2ptv_preview01.zip") 
    exemptFilenames.Add("name2.txt") 
    exemptFilenames.Add("name3.tar") 
    DeleteOldFiles("./", True, True, exemptFilenames) 
End Sub 
+0

很好用!非常感謝! – alexenv