2013-06-03 2 views
1

Он отлично работает в режиме отладки, но он дает мне «Процесс не может получить доступ к файлу, потому что он используется другим процессом» необработанная ошибка исключения при запуске встроенного и нажмите кнопку «Сохранить» (после этого она загружается, но не сохраняется). Любые советы, пожалуйста.vb.net IO.StreamWriter работает только в режиме отладки

Imports System.IO 
Public Class DL1 

    Function DirExists(ByVal DirName As String) As Boolean 
     On Error GoTo ErrorHandler 
     DirExists = GetAttr(DirName) And vbDirectory 
ErrorHandler: 
    End Function 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    End Sub 

    Private Sub LoadGlink_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LoadGlink.Click 

     GlinkList.Items.Clear() 



     Dim fileReader As System.IO.StreamReader 
     fileReader = _ 
     My.Computer.FileSystem.OpenTextFileReader("c:\Source\DL1\Glink.txt") 

     Dim mystring() As String = fileReader.ReadToEnd.Split(vbNewLine) 


     GlinkList.Items.AddRange(mystring) 

     fileReader.Close() 

     Me.Controls("Glinklist").Focus() 
    End Sub 

    Private Sub linktochrome_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles linktochrome.Click 
     If GlinkList.SelectedItem IsNot Nothing Then 
      ' selected item is sglink 
      Dim sglink = GlinkList.SelectedItem.ToString 


      Process.Start("C:\Users\1\AppData\Local\Google\Chrome\Application\chrome.exe", sglink) 
     End If 
     Me.Controls("Glinklist").Focus() 

    End Sub 

    Private Sub movetofol_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles movetofol.Click 



     Dim strDir As String 
     strDir = "C:\Users\1\Downloads\Glink\" & "\" & SFoltext.Text 
     If DirExists(Trim(strDir)) = False Then 
      MkDir(Trim(strDir)) 
     End If 


     For Each f As String In Sresult1.Items 
      Dim f_name As String = Path.GetFileName(f) 
      My.Computer.FileSystem.MoveFile(f, strDir & "\" & f_name) 
     Next 
     Sresult1.Items.Clear() 

     GlinkList.Items.Remove(GlinkList.SelectedItem) 


    End Sub 

    Private Sub ChecKDL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChecKDL.Click 

     Sresult1.Items.Clear() 
     Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String) 
     fileList = My.Computer.FileSystem.GetFiles("C:\Users\1\Downloads\") 


     For Each foundFile As String In fileList 
      Sresult1.Items.Add(foundFile) 
     Next 

    End Sub 

    Private Sub Bsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bsave.Click 
     Dim i As Integer 


     'Saves Glinklist 
     Dim path As String = System.IO.Path.Combine("c:\Source\DL1\", "Glink.txt") 
     Using fs As New System.IO.FileStream(path, IO.FileMode.Create) 

      Using w As IO.StreamWriter = New IO.StreamWriter(fs) 
       For i = 0 To GlinkList.Items.Count - 1 
        w.WriteLine(GlinkList.Items.Item(i)) 
       Next 
       w.Close() 
      End Using 
     End Using 
    End Sub 

    Private Sub RMselec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RMselec.Click 
     GlinkList.Items.Remove(GlinkList.SelectedItem) 
     Me.Controls("Glinklist").Focus() 
    End Sub 
End Class 
+0

не ответ, но вы знаете о [ 'File.ReadAllLines'] (http://msdn.microsoft.com/en-us/library/system.io.file.readalllines.aspx)? Может быть предпочтительнее вручную открывать/разделять файл. –

ответ

2

Не уверен, что это может быть ответ, но я отправлю сюда, потому что я могу лучше форматировать код.
Позвольте мне знать, если это меняет что-нибудь

Изменить вашу функцию чтения для

Using fileReader = _ 
    My.Computer.FileSystem.OpenTextFileReader("c:\Source\DL1\Glink.txt") 
    Dim mystring() = fileReader.ReadToEnd.Split(vbNewLine) 
    GlinkList.Items.AddRange(mystring) 
End Using 

или просто

Dim mystring() = File.ReadAllLines() 
    GlinkList.Items.AddRange(mystring) 
+0

Использование FileReader = _ My.Computer.FileSystem.OpenTextFileReader ("C: \ Source \ DL1 \ Glink.txt") Dim MyString() = File.ReadAllLine() GlinkList.Items.AddRange (MyString) End Использование «ReadAllLine» не является членом System.IO.file. Он говорит – user1785594

+0

+1 для привлечения внимания людей, однако OP вручную закрывает читателя 'fileReader.Close()'. – Sean

+0

File.ReadAllLines() является статическим методом класса File. Вам не нужен StreamReader. Второй пример является альтернативой целому, используя блок – Steve

0

Обычно это означает проблему с разрешением. Попробуйте запустить Visual Studio в качестве администратора, чтобы устранить эту возможность.

+0

Хорошо работает, когда я запускаю его в визуальной студии. Это не работает, когда я создаю его в DL1.exe и запускаю его. Он сбрасывается, когда я нажимаю загружать текстовый файл, а затем сохраняю его. Я попробовал ваш совет. К сожалению, это не сработало. – user1785594

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