簡體   English   中英

在vb.net中創建並寫入文本文件

[英]create and write to a text file in vb.net

我正在創建一個小的vb.net應用程序,我正在嘗試將列表視圖中的結果列表寫入文本文件。 我在線查看並找到了打開保存文件對話框並編寫文本文件的代碼。 當我在保存文件對話框中單擊“保存”時,我收到一條IOException,其中顯示消息“進程無法訪問文件'C:\\ thethe.txt',因為它正由另一個進程使用。” 文本文件在正確的位置創建,但為空。 應用程序退出此行“Dim fs As New FileStream(saveFileDialog1.FileName,FileMode.OpenOrCreate,FileAccess.Write)”提前感謝您的任何幫助。

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
    Dim myStream As Stream
    Dim saveFileDialog1 As New SaveFileDialog()

    saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
    saveFileDialog1.FilterIndex = 2
    saveFileDialog1.RestoreDirectory = True

    If saveFileDialog1.ShowDialog() = DialogResult.OK Then
        myStream = saveFileDialog1.OpenFile()
        If (myStream IsNot Nothing) Then
            Dim fs As New FileStream(saveFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.Write)
            Dim m_streamWriter As New StreamWriter(fs)
            m_streamWriter.Flush()
            'Write to the file using StreamWriter class
            m_streamWriter.BaseStream.Seek(0, SeekOrigin.Begin)
            'write each row of the ListView out to a tab-delimited line in a file
            For i As Integer = 0 To Me.ListView1.Items.Count - 1
                m_streamWriter.WriteLine(((ListView1.Items(i).Text & vbTab) + ListView1.Items(i).SubItems(0).ToString() & vbTab) + ListView1.Items(i).SubItems(1).ToString())
            Next
            myStream.Close()
        End If
    End If

End Sub

您已經使用SaveFileDialog.OpenFile打開了該文件的流 - 但是您嘗試使用此行同時打開另一個流:

Dim fs As New FileStream(...)

為什么不使用你有的流? (或者不要調用OpenFile 。)

(順便說一下,即使拋出異常, Using語句也可以幫助你清理文件句柄。)

嘗試簡化並使用StreamWriter:

    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click

        Dim saveFileDialog1 As New SaveFileDialog()

        saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
        saveFileDialog1.FilterIndex = 2
        saveFileDialog1.RestoreDirectory = True

        If saveFileDialog1.ShowDialog() = DialogResult.OK Then
            Using sw As New IO.StreamWriter(saveFileDialog1.FileName, False)
                'write each row of the ListView out to a tab-delimited line in a file 
                For i As Integer = 0 To Me.ListView1.Items.Count - 1
                    sw.WriteLine(((ListView1.Items(i).Text & vbTab) + ListView1.Items(i).SubItems(0).ToString() & vbTab) + ListView1.Items(i).SubItems(1).ToString())
                Next
            End Using
        End If

    End Sub

您有一個未正確釋放資源的正在運行的進程。 也許你的調試器?

[編輯]抱歉,我誤讀了代碼示例...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM