2012-07-18 84 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