none
儲存句炳進 txt 發生問題 RRS feed

  • 問題

  • 在下在開發自動回復機器人 針對儲存句炳進 txt 時 發生了點問題 

    求各位大大協助解決問題

     

    以下是程式碼:


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            '-----------------------------------
            '變數path用來存放檔案路徑
            Dim path As String = My.Computer.FileSystem.CurrentDirectory & "\Talk.txt"
            '變數buffer用來存放要寫入的資料
            Dim buffer1 As String
            Dim buffer2 As String
            Dim buffer As String
            '將要寫入的資料設定給buffer
           
            buffer1 = InputBox("你說什麼", "你說什麼")
    
            '------------------------------------------------------------------------------
            '判斷語句是否已存過
            Dim Temp As String = Application.StartupPath & "\Talk.txt"   '取得啟動應用程式的可執行檔路徑,不包括檔名。Application.StartupPath
    
            Dim c As Integer = 0
            Dim arlis As New ArrayList
            Dim arlis2 As New ArrayList
     
            arlis.Clear()
            arlis2.Clear()
    
    
            If File.Exists(Temp) Then '判斷檔案是否存在
                Using sr As StreamReader = New StreamReader(Temp, System.Text.Encoding.Default)  '設定資料流讀取器 StreamReader
                    Dim con As Integer = 0
                    Dim m() As String = Nothing
    
                    Dim str As String = ""
                    While (sr.EndOfStream <> True)  ' 先判斷語句在資料庫存不存在  將資料庫語句加載進去
                        str = sr.ReadLine
                        m = str.Split("|")
                        arlis.Add(m(0))
                        arlis2.Add(m(1))
                        con = con + 1
                    End While
    
                    If arlis.IndexOf(buffer1) <> -1 Then   '報告這個執行個體對話框中指定 String 第一個符合項目的索引。
    
                        MsgBox("這一句你已經存過瞜")
    
                    Else
                        buffer2 = InputBox("我回什麼", "我回什麼")
                        '------------------------------------------------------------------------------
                        buffer = buffer1 & "|" + buffer2 + vbCrLf
                        '將buffer的值寫入到檔案中
                        My.Computer.FileSystem.WriteAllText(path, buffer, True)
                        '----------------------------------
                    End If     
                End Using
    
            End If
    
        End Sub
    


      
    在下設計的思路是這樣:

    你講什麼|我回什麼

     

    如上面這樣 中間加 |  來區分說出及回復的句炳  目前卡在一個問題點

    就是我要設計成儲存過的句炳 就會顯示 "這一句你已經存過瞜"

    然後不存進去 以防止有語句存過的在加到語句庫裡面 增加查詢句子的麻煩

    但我在測試時

    程式在這一行發生了問題 >>   My.Computer.FileSystem.WriteAllText(path, buffer, True)

     

    錯誤訊息:

    由於另一個處理序正在使用檔案 'C:\Users\tom\Desktop\即時通AI2011 8.1\WindowsApplication1\WindowsApplication1\bin\Debug\Talk.txt',所以無法存取該檔案。

     

    不曉得哪邊出現了問題 照理說沒儲存過的語句 應該這樣就可以寫進 txt 裡面了 可是怎麼會發生這個問題

     

    求解.



    • 已編輯 向恩 2011年11月20日 下午 03:31
    2011年11月20日 下午 03:30

解答

  • StreamReader 用完要記得隨手關閉.

    還有 "句柄" 應該指的是 handle, 也就是稱之為 "控制代碼" 的那玩意. 你突然這樣用名詞, 我們還真不懂你指的是什麼.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2011年11月20日 下午 05:07
    版主
  • 您好

    StreamReader 讀入檔案後,使用 StreamReader.ReadToEnd 方法 將 txt 檔案資料讀入後就釋放 (End Using)


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 向恩 2011年11月21日 上午 01:43
    2011年11月21日 上午 01:05
    版主

所有回覆

  • StreamReader 用完要記得隨手關閉.

    還有 "句柄" 應該指的是 handle, 也就是稱之為 "控制代碼" 的那玩意. 你突然這樣用名詞, 我們還真不懂你指的是什麼.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2011年11月20日 下午 05:07
    版主
  • 您好

    StreamReader 讀入檔案後,使用 StreamReader.ReadToEnd 方法 將 txt 檔案資料讀入後就釋放 (End Using)


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 向恩 2011年11月21日 上午 01:43
    2011年11月21日 上午 01:05
    版主
  • 可以了  謝謝大大們的指點 ^^
    2011年11月21日 上午 01:43