嵌套循环不工作vb.net

嵌套循环不工作vb.net,vb.net,visual-studio-2010,Vb.net,Visual Studio 2010,我试图从源目录中读取文件名,然后读取一个单独的文件来重命名文件并将其移动到目标目录。下面的代码读取文件名,但问题是它只读取app.ini文件的内容一次,即第一个文件名。只要for loops切换到第二个文件名,代码就不会循环app.ini Dim di As New IO.DirectoryInfo("D:\Transcend") Dim diar1 As IO.FileInfo() = di.GetFiles() Dim dra As IO.FileInfo

我试图从源目录中读取文件名,然后读取一个单独的文件来重命名文件并将其移动到目标目录。下面的代码读取文件名,但问题是它只读取app.ini文件的内容一次,即第一个文件名。只要for loops切换到第二个文件名,代码就不会循环app.ini

 Dim di As New IO.DirectoryInfo("D:\Transcend")
        Dim diar1 As IO.FileInfo() = di.GetFiles()
        Dim dra As IO.FileInfo
        If (di.GetFiles.Count > 0) Then
            Dim a As Integer = 1
            Dim b As Integer = 1
            For Each dra In diar1
                ComboBox1.Items.Add(dra.FullName.ToString)
                Using reader2 As New IO.StreamReader("D:\Transcend\test\app.ini")
                    Do While reader2.Peek() >= 0
                        Dim line2 = reader2.ReadLine
                        Do Until line2 Is Nothing
                            'line2 = reader2.ReadLine()
                            'ComboBox1.Items.Add(line2.ToString)
                            'Label1.Text = line2
                            If line2 <> Nothing Then
                                If line2.Contains("filename" + a.ToString) Then
                                    Dim values() As String = line2.Split(CChar(":")).ToArray
                                    Dim values2() As String = values(1).Split(CChar(";")).ToArray() 'full filename
                                    Dim values3() As String = values(2).Split(CChar(";")).ToArray() 'keyword to be replaced in filename
                                    Dim values4() As String = values(3).Split(CChar(";")).ToArray() 'fullname in place of keyword
                                    Dim values5() As String = values(4).Split(CChar(";")).ToArray 'destination drive letter
                                    Dim values6() As String = values(5).Split(CChar(";")).ToArray 'destination path after drive letter
                                    ComboBox1.Items.Add(values2(0))
                                    ComboBox1.Items.Add(values3(0))
                                    ComboBox1.Items.Add(values4(0))
                                    ComboBox1.Items.Add(values5(0) + ":" + values6(0))
                                    'Label1.Text = dra.Name.ToString
                                    If dra.Name.ToString.Contains(values2(0)) Then
                                        Dim n As String = dra.Name.Replace(values3(0), values4(0))
                                        File.Copy(dra.FullName, values5(0) + ":" + values6(0) + n)
                                    End If
                                End If
                            End If
                            Exit Do
                        Loop
                        a = a + 1
                    Loop
                    reader2.Close()
                End Using
                b = b + 1
            Next
            Label1.Text = b
        Else
            MsgBox("No files!")
            End
        End If
Dim di作为新IO.DirectoryInfo(“D:\超越”)
Dim diar1作为IO.FileInfo()=di.GetFiles()
将dra变暗为IO.FileInfo
如果(di.GetFiles.Count>0),则
将a变暗为整数=1
尺寸b为整数=1
对于diar1中的每个dra
ComboBox1.Items.Add(dra.FullName.ToString)
使用reader2作为新的IO.StreamReader(“D:\Exchange\test\app.ini”)
读取时执行2.Peek()>=0
尺寸线2=reader2.ReadLine
直到第二行什么都没有
'line2=reader2.ReadLine()
'ComboBox1.Items.Add(第2行ToString)
'Label1.Text=line2
如果第2行什么都没有,那么
如果line2.包含(“filename”+a.ToString),则
Dim values()作为字符串=line2.Split(CChar(“:”).ToArray
Dim values2()作为字符串=值(1).Split(CChar(“;”).ToArray()完整文件名
Dim values3()作为字符串=值(2).Split(CChar(“;”).ToArray()”关键字将在文件名中替换
Dim values 4()作为字符串=值(3)。拆分(CChar(;“”)。ToArray()'全名替换关键字
Dim values 5()作为字符串=值(4)。拆分(CChar(“;”)。ToArray的目标驱动器号
Dim values6()作为字符串=值(5)。拆分(CChar(“;”)。驱动器号后的ToArray'目标路径
ComboBox1.Items.Add(值2(0))
ComboBox1.Items.Add(值3(0))
ComboBox1.项目.添加(值4(0))
组合框1.项目.添加(值5(0)+“:“+值6(0))
'Label1.Text=dra.Name.ToString
如果dra.Name.ToString.Contains(values2(0))则
尺寸n为字符串=dra.Name.Replace(值3(0),值4(0))
文件副本(dra.FullName,值5(0)+“:“+值6(0)+n)
如果结束
如果结束
如果结束
退出Do
环
a=a+1
环
reader2.Close()
终端使用
b=b+1
下一个
标签1.Text=b
其他的
MsgBox(“没有文件!”)
终点
如果结束
输出图像:


上图显示了输出和错误,第一行是filename1,接下来的8行是app.ini文件的输出。如您所见,一旦文件名1更改为下一个文件名,即上图第9行中的Autorun.inf,则应在Autorun.inf文件名后重复相同的8行app.ini(上图中的第2行至第9行),但在文件名增加到Autorun.inf,然后再增加到FreeSoftware(JF)后,app.ini无法读取.htm.

第一个文件和第二个文件之间的唯一区别是
a
b

在第一次运行时,
a
将从1开始,并且它将在
app.ini
文件中的每一行递增。读取8行后,
a
的最终值将为9

对于第二个文件,值
a
未重置,因此其值仍为9。这意味着以下条件永远不会为真,因为第一次运行只找到1到8*之间的值

If line2.Contains("filename" + a.ToString) Then
要解决问题,必须在每个文件之间将
a
变量值设置回1:

Using reader2 As New IO.StreamReader("D:\Transcend\test\app.ini")
    a = 1
    Do While reader2.Peek() >= 0
*我假设.ini文件中的文件名已排序(即包含filename9的行未在filename2之前列出),并且没有外部进程在第一个文件和第二个文件之间更改.ini文件的内容