2014-03-30 23 views
0

我毫不懷疑,這個問題是非常基本的字符,但對我來說,這是相當困難的... 我想用saveFileDialog選擇一個文件名/路徑。 像這樣:關於System.IO.StreamWriter的問題

private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) 
{ 
    // Get file name. 
    string name = saveFileDialog1.FileName; 

來源:http://www.dotnetperls.com/savefiledialog

然後,我想從上面的路徑(假設這是這樣的)

System.IO.StreamWriter file = new System.IO.StreamWriter(saveFileDialog1_FileOk.FileName); 

這已經在做申報的StreamWriter saveFileDialog1_FileOk函數。然後我想從另一個函數/事件處理程序(SerialPort已收到數據)寫入該文件。並且文件名應該能夠在運行時更改爲新文件,以便將來自事件處理程序 的數據寫入另一個文件。

但是,從其他功能,我無法訪問StreamWriter,我不知道如何更改文件。

另外我想知道如何在運行時使文件中的數據可訪問。在我的第一個測試中,它總是寫入文件時,我打電話

file.Close() 

b ut時,我無法再次打開它。

這將是一個很大的幫助,如果還有人建議我要走的路...

+0

你能澄清你的意思是什麼「但我就不能再次打開它」?你如何試圖重新打開文件,當你做什麼時會發生什麼? –

+0

你的問題不是很清楚。你想寫入相同的文件或不同的文件? –

+1

您不需要使用'FileOk'事件處理程序。你可以在if(saveFileDialog.ShowDialog()== DialogResult.OK){//在這裏聲明StreamWriter}來完成它。 – Dai

回答

0

如果我理解正確你的問題;您選擇的方法似乎違反了單一責任原則,除了導致所有這些問題。

可能是你應該考慮做什麼是創建一個管理流的一個靜態實例類,並從打開的對話框和串口事件 使用它讓我們稱之爲流管理類StreamManager。這將有一個實現similer下面的代碼

public class StreamManager 
{ 
    private static StreamWriter file = null; 

    public void NewFile(string filePath) 
    { 
     this.close(); 

     file = new StreamWriter(filePath); 
    } 

    public void WriteToFile(string yourData) 
    { 
     file.Write(yourData); 
    } 

    public void close() 
    { 
     if (file != null /* and if not already been closed*/) 
     { 
      file.Flush(); 
      file.Close(); 
     } 
    } 
} 

現在你可以從串口new StreamManager().NewFile(fileName)打開的對話框和new StreamManager().WriteToFile(…)調用。

請注意我沒有測試過上面的代碼,只是作爲指導提供。你應該增加更多的狀態/錯誤管理的所有方法

乾杯