2016-03-04 31 views
0

目录和出口在DGV有我的代码:我如何循环文件在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 

,我需要选择刚才的所有.zip文件,获取zip文件名中的数字,然后再次循环目录,以从zip中搜索具有相同编号的文件,然后将其添加到datagrid。我的问题是,我的代码显示输出是这样的:的

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

代替

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

请帮助...

回答

0

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

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 

DisplayFilesByNumberSub其中通过文件环路包含一个给定字符串(在这种情况下,在数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中,但我相信您可以应对这一点。