2016-03-04 1 views
0

J'ai mon code:Comment les fichiers boucle dans un répertoire et d'exportation DGV dans 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 

suppose que mon répertoire contient ces fichiers:

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

Je dois seulement sélectionner .zip fichiers, obtenir les numéros dans le nom de fichier zip, et boucle à nouveau sur le répertoire pour rechercher des fichiers avec le même numéro à partir du zip puis l'ajouter à datagrid. Mon problème est, mon code affiche la sortie comme ceci:

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

au lieu de

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

s'il vous plaît aider ...

Répondre

0

Je ne sais pas si je vous comprends. Je vous propose d'utiliser le code suivant.

Cette Sub est pour une boucle à travers les fichiers avec une extension .zip dans un trajet suivant:

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 

Le DisplayFilesByNumber est un Sub où la boucle à travers les fichiers qui contient une chaîne donnée (dans ce cas, le nombre de le fileName) est fait.

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 

Ce Sub a besoin d'une fonction simple pour obtenir le numéro dans le fileName.

Imports.Text.RegularExpressions 

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

Cela donne la prochaine sortie:

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

J'espère que je vous ai bien compris. Je ne stocke pas de valeurs dans une DGV mais je suis sûr que vous pouvez faire face à cela.