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