代码之家  ›  专栏  ›  技术社区  ›  SqlRyan

是否有更简单的方法来协调文件列表和带有子文件夹/文件的目录以查找更改?

  •  0
  • SqlRyan  · 技术社区  · 14 年前

    我有一个包含文件列表(路径+文件名)的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开发人员,所以我想到了两个列表不匹配的外部联接。有什么问题吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Hans Olsson    14 年前

    我想不出任何解决方案能像你想的那样简洁,但是如果你担心IO性能,而不是两次查找每个现有的文件,只需读取所有的文件位置并在内存中全部执行即可。

    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
    

    如果存储在数据库中的路径名的大小写可能与文件系统中的不同,那么您可能需要对此进行调整。