Member 12296756 Ответов: 2

Удалить все файлы, кроме 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 <> "exceptme.txt" Then
                System.IO.File.Delete(m_sFileName)
            End If
        Next


и DeleteOldFiles ("./", True, True)на кнопке управления.

но этот код работает только с одним файлом.
я хочу, кроме других файлов.
как я могу это сделать?

Что я уже пробовал:

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

2 Ответов

Рейтинг:
2

Suvendu Shekhar Giri

Вы можете поместить все имена файлов, которые вы хотите исключить из текущей операции, в массив, а затем использовать Array.Exists() для проверки.

Ваш код должен выглядеть примерно так -

For Each m_sFileName In
System.IO.Directory.GetFiles(AsDirectoryName)
     Dim FilesToExclude As String() = {"exceptme.txt", "exceptmetoo.txt", "igonemetoo.txt"}
            If Not Array.Exists(FilesToExclude, Function(element) element = m_sFileName) Then
                System.IO.File.Delete(m_sFileName)
            End If
        Next


Надеюсь, это поможет :)


Member 12296756

нет. это не работает. все еще за исключением одного файла. остальные 2 файла удаляются.

Рейтинг:
0

Member 12296756

я исправил позже Вот так:

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
                MsgBox("Skipped " & m_sFileName)
            Else
                System.IO.File.Delete(m_sFileName)
            End If
        Next
    End Sub


и использование:

Dim exemptFilenames As New List(Of String)()
        exemptFilenames.Add("./exceptme.txt")
        exemptFilenames.Add("./exceptmetoo.txt")
        exemptFilenames.Add("./ignoremetoo.txt")
        DeleteOldFiles("./", True, True, exemptFilenames)