2012-07-18 25 views
2

我有兩個文件流,其收集從不同的文件不同的信息:FileStream,只產生一個結果?

FileStream dataStruc = new FileStream("c:\\temp\\dataStruc.txt", FileMode.Create, FileAccess.ReadWrite); 

FileStream csvFile = new FileStream("c:\\temp\\" + fileName + ".txt", FileMode.Create, FileAccess.ReadWrite); 

StreamWriter sw = new StreamWriter(csvFile); 
StreamWriter swc = new StreamWriter(dataStruc); 

當兩個streamwriters用於得到相同的一條信息等圖所示:

sw.WriteLine(sheet); 
swc.WriteLine(sheet); 

然後sw的StreamWriter具有從信息文件。我是否設置了錯誤的文件流?

+0

向我們顯示您的完整代碼。 – 2012-07-18 15:27:45

回答

2

假設你沒有得到任何異常/錯誤和喜歡的csvFile的FileStream正確的路徑基本的東西進行驗證,發現是正確的:試着增加Flush()或屬性格式關閉使用Close()流。更好:使用using聲明。

編輯
再次閱讀您的問題後:你確定你只是不切換文件流?

StreamWriter sw = new StreamWriter(csvFile); 
StreamWriter swc = new StreamWriter(dataStruc); 

,而不是

StreamWriter sw = new StreamWriter(dataStruc); 
StreamWriter swc = new StreamWriter(csvFile); 

你的問題和描述相當含糊:「兩個streamwriters來獲得相同的資料片」。如何將流作者用於獲取信息?另外:「sw streamwriter具有來自文件的信息」:你能更具體嗎?這沒有意義。

無論情況如何;使用調試器盧克!

+1

非常感謝你的幫助,所需要的只是其中一個流寫器上的flush()方法。謝謝 – loles 2012-07-19 08:12:43

+0

其實,你可能都需要它。甚至更好:你應該使用[using語句](http://msdn.microsoft.com/en-us/library/yh598w02.aspx) – RobIII 2012-07-19 09:08:54

0

我想你有衝突併發兩個StreamWriters訪問該文件。

你用FileMode.Create打開流。請參閱MSDN documentation(由我突出顯示):

指定操作系統應該創建一個新文件。 如果 文件已經存在,它將被覆蓋。此操作需要 FileIOPermissionAccess.Write權限。 System.IO.FileMode.Create是 等同於請求如果該文件不存在,請使用 CreateNew; 否則,請使用截斷

我不知道如果第二StreamWriter,根據初始化的順序上,覆蓋第一StreamWriter的文件或只是失敗。無論哪種方式,他們都會嘗試相互衝突的工作。

可能的解決方案:

  • 確保流後對方,例如訪問文件只有一個通過在第二個訪問文件之前關閉第一個流,例如與using塊。
  • 更改流上的FileMode,以便在可能的情況下不會覆蓋現有文件。 (請參閱上面的文檔。)
+0

啊,聰明。實際上,變量'fileName'包含值「'dataStruc'」,在這種情況下,兩個編寫者都會寫入同一個文件。只要不是所有的代碼都被髮布(或者至少發佈了'fileName'變量的內容),恐怕任何人都會猜到。 – RobIII 2012-07-18 15:52:03