【问题标题】:vb.net IO.StreamWriter only works in debug modevb.net IO.StreamWriter 仅在调试模式下工作
【发布时间】:2013-06-03 18:38:37
【问题描述】:

它在调试模式下完美运行,但是当我运行构建的文件并按下保存按钮时,它给了我“进程无法访问文件,因为它正被另一个进程使用”未处理的异常错误(它加载但不保存后那)。 请给点建议。

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

【问题讨论】:

  • 不是答案,但你知道File.ReadAllLines吗?可能比手动打开/拆分文件更可取。

标签: vb.net


【解决方案1】:

不确定这可能是答案,但我会在这里发布,因为我可以更好地格式化代码。
如果这有任何改变,请告诉我

将阅读功能改为

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)

【讨论】:

  • 使用 fileReader = _ My.Computer.FileSystem.OpenTextFileReader("c:\Source\DL1\Glink.txt") Dim mystring() = File.ReadAllLine() GlinkList.Items.AddRange(mystring ) End Using 'ReadAllLine 不是 System.IO.file 的成员。它说
  • +1 以引起人们的注意,但是 OP 正在使用 fileReader.Close() 手动关闭阅读器。
  • File.ReadAllLines() 是 File 类的静态方法。您不需要 StreamReader。第二个例子是使用块的替代整体
  • 修正了 ReadAllLines 上的错字
  • readalllines("c:\Source\DL1\glink.txt") 方法要简单得多。谢谢你。但是我尝试了它们,但它们给出了相同的错误。
【解决方案2】:

这通常意味着权限问题。尝试以管理员身份运行 Visual Studio 以消除这种可能性。

【讨论】:

  • 当我在 Visual Studio 中运行它时效果很好。当我将它构建到 DL1.exe 并运行它时,它不起作用。当我单击加载文本文件然后保存它时它会崩溃。我试过你的建议。可悲的是,它没有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多