У меня есть догадка, что по какой-то причине вы теряете возможность писать, находясь в цикле каталогов, но, возможно, нет. У меня есть приложение vb.net, которое работает через каталог и извлекает из него все файлы csv, просматривает их, а затем записывает их в таблицу данных. Код для записи информации о файле csv в Datagridview работает, когда я задаю исходный путь в виде строки для одного файла, но когда я добавляю цикл каталогов, он просто прекращает запись. Я добавил часы на все переменные, и все проверено. Я понятия не имею, почему код будет работать сам по себе, но не в цикле каталогов. Я подумываю о попытке создать массив строк со всеми исходными путями, а затем перебрать массив строк как возможное исправление, но я не понимаю, почему это не работает.
Try
'loop through directory
Dim i As Integer = 0
Dim strFileName As String
Dim strFolder As String = "Y:\Public\Sanmina Production\3-Projector MTF Test\"
Dim strFileSpec As String : strFileSpec = strFolder & "*.csv"
strFileName = Dir(strFileSpec)
Do While Len(strFileName) > 0
Dim SourcePath As String = strFolder + strFileName
If File.Exists(SourcePath) Then
Else
MsgBox("There is an error finding the excel file. Please contact ")
Exit Sub
End If
Try
'The code works from here to the end of this using statement
'if I remove sourcepath and replace it with a single file directory
i = 0
Using myReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(SourcePath)
myReader.TextFieldType = FileIO.FieldType.Delimited
myReader.SetDelimiters(",")
Dim currentRow As String()
While Not myReader.EndOfData
Try
currentRow = myReader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
If currentField = "" Then
'Must be value
DataGridView1.Rows(0).Cells(i).Value = currentField
i = i + 1
Else
If currentField.Substring(0, 1) = "M" Then
If currentField.Substring(1, 1) = "T" Then
If currentField.Substring(2, 1) = "F" Then
'Skip this one
' MsgBox("Skip")
Else
DataGridView1.Rows(0).Cells(i).Value = currentField
i = i + 1
End If
Else
DataGridView1.Rows(0).Cells(i).Value = currentField
i = i + 1
End If
Else
DataGridView1.Rows(0).Cells(i).Value = currentField.ToString
i = i + 1
End If
End If
Next
Catch ex As Microsoft.VisualBasic.
FileIO.MalformedLineException
MsgBox("Line " & ex.Message &
"is not valid and will be skipped.")
End Try
End While
End Using
DataGridView1.Rows.Add("")
i = 0
Catch ex As Exception
MsgBox(ex.ToString)
End Try
strFileName = Dir()
Loop
Catch ex As Exception
MsgBox(ex.ToString)
End Try