2014-12-26 2 views
0

Мой кодНеожиданное поведение внутри вложенных циклов

Dim fileReader As StreamReader 
    Dim fileName, temp, strVal As String 

    For i As Integer = 0 To lbFolder.Items.Count - 1 

     Dim iText As String = CStr(lbFolder.Items(i)) 
     Dim partPath As String = lblPath.Text + "\" + iText 
     Dim pathNum As String = partPath + "\2100\" 
     Dim directory As New DirectoryInfo(pathNum) 
     Dim fileArr As FileInfo() = directory.GetFiles() ' Get a reference to each file in that directory. 
     ' Display the names of the files. 
     Dim xItem As FileInfo 
     For Each xItem In fileArr 
      lblFname.Text = xItem.ToString 
      strVal = pathNum & xItem.ToString 
      lbFiles.Items.Add(strVal) 
     Next 
     For j = 0 To lbFiles.Items.Count - 1 
      fileReader = File.OpenText(pathNum + xItem.ToString) 
      temp = fileReader.ReadToEnd 
      File.AppendAllText(partPath + "\2100\" + "2100_Merged.txt", temp) 
     Next j 
     lbFiles.Items.Clear() 
    Next i 
End Sub 

У меня есть каталог с вложенными папками. Со многими детьми и каждым ребенком, имеющим 4 подщелицы, и каждый дочерний ребенок имеет 4 файла.

Родитель

... Ребенок

...... subchild1

......... Файл 1

....... ..File 2

......... Файл 3

......... Файл 4

...... subchild2

...... subchild3

...... subchild4

Мой Намерение смотреть на каждого ребенка, то принести Слейте все файлы в один файл txt, а затем перейти к следующему подчинду.

Псевдо код может выглядеть

open Subchild folder 

    for each file in subchild folder 
     listbox.additem(file) 
    next 

    for each item in listbox 
     add to temp file 
    next 

    output tmp file 

next subchild 

Что происходит в том, что при прохождении через

for each xItem in filArr 

следующая серия IText происходит, которую я могу видеть сквозь часы. Это происходит, даже если у меня есть перерыв в первом следующем.

Как это исправить?

** Edit *****

Для тех, которые могли бы хотеть, чтобы проверить это здесь весь мой код.

Это требует 2 ListBoxes, 2 метки, 2 кнопки

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 

    'open folders 
    Dim dialog = New FolderBrowserDialog() 
    dialog.SelectedPath = Application.StartupPath 
    If DialogResult.OK = dialog.ShowDialog() Then 
     lblPath.Text = dialog.SelectedPath 
    End If 

    For Each folder As String In System.IO.Directory.GetDirectories(lblPath.Text) 
     lbFolder.Items.Add(Path.GetFileName(folder)) 
    Next 



End Sub 

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 

    Dim found700 As Boolean 
    Dim fileReader As StreamReader 
    Dim fileName, temp, strVal As String 

    For i As Integer = 0 To lbFolder.Items.Count - 1 

     Dim iText As String = CStr(lbFolder.Items(i)) 
     Dim partPath As String = lblPath.Text + "\" + iText 
     Dim pathNum As String = partPath + "\2100\" 
     Dim directory As New DirectoryInfo(pathNum) 
     Dim fileArr As FileInfo() = directory.GetFiles() ' Get a reference to each file in that directory. 
     ' Display the names of the files. 
     Dim xItem As FileInfo 
     For Each xItem In fileArr 
      lblFname.Text = xItem.ToString 
      strVal = pathNum & xItem.ToString 
      lbFiles.Items.Add(strVal) 
     Next 
     For j = 0 To lbFiles.Items.Count - 1 
      fileReader = File.OpenText(pathNum + xItem.ToString) 
      temp = fileReader.ReadToEnd 
      File.AppendAllText(pathNum + "2100_Merged.txt", temp) 
     Next j 
     lbFiles.Items.Clear() 
    Next i 
End Sub 

ответ

1

В вашей второй цикл, изменить pathNum + xItem.ToString к lbFiles.Items.Item(j)

For j = 0 To lbFiles.Items.Count - 1 
     fileReader = File.OpenText(lbFiles.Items.Item(j)) 
     temp = fileReader.ReadToEnd 
     File.AppendAllText(partPath + "\2100\" + "2100_Merged.txt", temp) 
    Next j 

Или

For Each f In lbFiles.Items 
     fileReader = File.OpenText(f) 
     temp = fileReader.ReadToEnd 
     File.AppendAllText(partPath + "\2100\" + "2100_Merged.txt", temp) 
    Next 
+0

Я получаю это исключение, когда Я бегу таким образом. Необработанное исключение типа «System.IO.IOException» произошло в mscorlib.dll Дополнительная информация: Процесс не может получить доступ к файлу «C: \ Text \ Ackland Art Museum - Basement \ 2100 \ 2100_Merged.txt», потому что он используемый другим процессом. – JForgie

+0

Я смог обратиться к нему. Я уже создал файл с файлами, и он был открыт. После удаления все отлично поработало. – JForgie

Смежные вопросы