Существует ли более простой способ согласования списка файлов и каталога с подпапками / файлами для поиска изменений? - PullRequest
0 голосов
/ 03 июня 2010

У меня есть таблица SQL Server со списком файлов (путь + имя файла) и папка с несколькими слоями и файлами в каждом слое. Я ищу способ согласовать два без необходимости обрабатывать список дважды. В настоящее время я делаю это:

For Each f as FileInfo In FileListFromDatabase
   If f.Exists is False, mark it as deleted in the database
Next

For Each f as FileInfo In RecursiveListOFFilesOnDisk
   If Not FileExistsInDatabase, then add it
Next

Есть ли лучший способ сделать это? Я хотел бы избежать преобразования всех подходящих файлов (из которых большинство будет) в объекты FileInfo дважды. Поскольку я сначала разработчик T-SQL, я представляю что-то вроде ВНЕШНЕГО СОЕДИНЕНИЯ из двух списков, где они не совпадают. Что-то LINQ-иш?

1 Ответ

1 голос
/ 03 июня 2010

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

Dim dbFiles As List(Of String)
Dim files As New List(Of String)
files.AddRange(IO.Directory.GetFiles("path", "pattern", IO.SearchOption.AllDirectories))
Dim deletedFiles As New List(Of String)
For Each dbfile As String In dbFiles
    If files.Contains(dbfile) Then
        files.Remove(dbfile)
    Else
        deletedFiles.Add(dbfile)
    End If
Next
' now deleteFiles should have all files that have been deleted from the file 
' system and files should have all new files in the file system

Если имена путей, хранящиеся в БД, могут иметь регистр, отличный от имен в файловой системе, вам, возможно, придется изменить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...