2016-08-04 2 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 ("./", True, True) на кнопки управления. , но этот код работает только с одним файлом. Я хочу, чтобы больше файлов. как я могу это сделать?

+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

Смежные вопросы