2010-03-16 4 views
3

작은 vb.net 응용 프로그램을 만들고 있는데, 목록보기의 결과 목록을 텍스트 파일에 쓰려고합니다. 나는 온라인으로 봤는데 파일 저장 대화 상자를 열고 텍스트 파일을 작성하는 코드를 발견했습니다. 파일 저장 대화 상자에서 저장을 클릭하면 "다른 프로세스에서 사용 중이기 때문에 프로세스가 'C : \ thethe.txt'파일에 액세스 할 수 없습니다."라는 메시지와 함께 IOException이 발생합니다. 텍스트 파일은 올바른 위치에 만들어 지지만 비어 있습니다. 이 줄에서 응용 프로그램이 종료됩니다. "Dim fs As New FileStream (saveFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.Write)"사전 도움을 요청하십시오.vb.net의 텍스트 파일을 만들고 쓰십시오.

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 

답변

5

시도가 단순화하고 대신 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 
+0

. 정말 고마워. – Zachary

5

당신은 이미 SaveFileDialog.OpenFile를 사용하여 파일 스트림을 열었습니다 -하지만 당신은이 라인과 동시에 다른 스트림을 열려고하는 :

Dim fs As New FileStream(...) 

왜 사용하지 네가 가진 시내? (또는 OpenFile를 호출하지 않습니다.)

을 (Btw는하는 Using 문을 사용하면 파일이 예외가 발생되는 경우에도 처리 정리 도움이 될 것이다.)

1

을 당신은 공개하지 않았다 실행중인 프로세스를 적절하게 자원. 어쩌면 디버거일까요?

[편집] 미안 해요, 난 코드 샘플은 ...

관련 문제