VB.NET 如何循环目录中的文件并导出到 DGV 中

How to loop files in a directory and export in DGV in VB.NET

我有我的代码:

    For i As Integer = 0 To lstDir.Items.Count - 1  
         For Each File As String In Directory.GetFiles(lstDir.Items(i))
              Fname = File.ToString.Substring(File.LastIndexOf("\") + 1)
              i = +1

              If File.Contains(".zip") Then
                  res = ""
                  For Each Str As Char In Fname
                      If IsNumeric(Str) Then
                         res = res & Str
                      End If
                  Next

                  For x As Integer = 0 To lstDir.Items.Count - 1
                      For Each newFile As String In Directory.GetFiles(lstDir.Items(x))
                          If newFile.Contains(res) Then
                             dgContents.Rows.Add(Fname)
                          End If
                       Next
                  Next

              End If

    Next
Next

假设我的目录包含这些文件:

abc123.pdf
def456.zip
ghi123.zip
jkl123.xml
mno456.pdf
pqr456.xml

我需要 select 所有 .zip 文件,获取 zip 文件名中的数字,然后在目录上再次循环以搜索具有相同数字的文件从 zip 然后将其添加到数据网格。我的问题是,我的代码显示如下输出:

def456.zip
def456.zip
def456.zip
ghi123.zip
ghi123.zip
ghi123.zip

而不是

def456.zip
mno456.pdf
pqr456.xml 
ghi123.zip
abc123.pdf
jkl123.xml

请帮忙...

不知道我是否理解你。我建议你使用下一个代码。

Sub 用于循环遍历给定路径中扩展名为 .zip 的文件:

Imports System.IO

     Public Sub GetFilesFromDir(path As String)
                ' Make a reference to a directory.
                Dim di As New DirectoryInfo(path)
                ' Get a reference to each file in that directory.
                Dim fiArr As FileInfo() = di.GetFiles()
                ' Display the names of the files.
                Dim file As FileInfo
                Dim fileName As String = ""
                For Each file In fiArr
                    If file.Extension = ".zip" Then
                        Console.WriteLine("------------- {0} -----------", file.Name)
                        fileName = System.IO.Path.GetFileNameWithoutExtension(path & "\" & file.Name)
                        DisplayFilesByNumber(fiArr, fileName)
                    End If
                Next
     End Sub

DisplayFilesByNumber 是一个 Sub,其中循环遍历包含给定字符串(在本例中为 fileName 中的数字)的文件。

Public Sub DisplayFilesByNumber(fiArr As FileInfo(), fileName As String)
        For Each fileByNumber In fiArr
            If fileByNumber.Name.Contains(GetNumbers(fileName)) Then
                Console.WriteLine(fileByNumber)
            End If
        Next
End Sub

这个Sub需要一个简单的函数来获取fileName中的数字。

Imports.Text.RegularExpressions

    Public Function GetNumbers(fileName As String) As String
            GetNumbers = Regex.Replace(fileName, "[^0-9]", String.Empty)
    End Function

这给出了下一个输出:

------------- def456.zip -----------
def456.zip
mno456.pdf
pqr456.xml
------------- ghi123.zip -----------
abc123.pdf
ghi123.zip
jkl123.xml

希望我理解正确。我没有将值存储在 DGV 中,但我相信您可以应对。