Marc Kane Ответов: 1

Удалите файлы, содержащие строку из списка


Я хочу удалить все файлы в папке, имена которых не могут быть найдены в элементах списка. Я предполагаю, что мне где-то не хватает счетчика, но не совсем уверен, как именно это сделать.

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

Dim directoryName As String = "Folderimages"
For Each deleteFile In Directory.GetFiles(directoryName, "*.*",SearchOption.TopDirectoryOnly)
For Each item In ListBox1.Items
Dim items As Object = ListBox1.Items
Dim itemText As String = ListBox1.GetItemText(items)                
If Not deleteFile.Contains(itemText) Then
File.Delete(deleteFile)
   End If
 Next
Next

1 Ответов

Рейтинг:
7

Maciej Los

Вам не нужно использовать 2 петли... В случае, когда ListBox содержит только имена файлов, исключая путь, вы должны передать путь для создания полного имени файла (включая путь).

Dim directoryName As String = "Folderimages"
'get all files
Dim AllFiles As List(Of String) = Directory.GetFiles(directoryName, "*.*",SearchOption.TopDirectoryOnly).ToList()
'files which can NOT be deleted
Dim ExcludeFiles As List(Of String) = ListBox1.Items.OfType(Of String).Select(Function(x) directoryName + x).ToList()
'files to delete
Dim FilesToDelete  = AllFiles.Except(ExcludeFiles)
For Each f As String In FilesToDelete
    File.Delete(f)
Next


Для получения более подробной информации, пожалуйста, смотрите:
Перечислимый.Метод oftype&ЛТ;становится TResult> По методу(интерфейс IEnumerable) (система.По LINQ) | Майкрософт Документы[^]
Перечислимый.Кроме Метода (System.Linq) | Microsoft Docs[^]


RickZeeland

5d!

Maciej Los

Спасибо!

RickZeeland

Хммм, здесь отсутствует обратная косая черта, так и должно быть:
Dim ExcludeFiles As List(Of String) = ListBox1.Предметы.OfType(Of String).Выберите(Function(x) directoryName + "\" + x).Список()

Maciej Los

Хорошая мысль!

Marc Kane

Спасибо вам, ребята!

Maciej Los

Всегда пожалуйста.