FileStream,只产生一个结果?

时间:2012-07-18 15:22:19

标签: c# 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);

当两个streamwrite用于获取如下所示的相同信息时:

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

然后sw streamwriter拥有来自文件的信息。我是否错误地设置了文件流?

2 个答案:

答案 0 :(得分: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);

你的问题和描述相当含糊:“两个使用的转录器都用于获取相同的信息”。如何将作家用于获取信息?另外:“ sw streamwriter包含来自文件的信息”:你能更具体一点吗?这没有意义。

无论情况如何;使用调试器luke!

答案 1 :(得分:0)

我认为两个StreamWriters都存在冲突的并发访问权限。

您使用FileMode.Create打开流。请参阅MSDN documentation(由我突出显示):

  

指定操作系统应创建新文件。 如果   文件已存在,将被覆盖。此操作需要   FileIOPermissionAccess.Write权限。 System.IO.FileMode.Create是   相当于请求如果文件不存在,请使用   创建新的; 否则,请使用截断

我不确定第二个StreamWriter是否会覆盖第一个StreamWriter的文件或者只是失败,这取决于初始化的顺序。无论哪种方式,他们都会尝试相互冲突的工作。

可能的解决方案:

  • 确保流只能一个接一个地访问文件,例如:通过在第二个流访问文件之前关闭第一个流,例如, using阻止。
  • 更改流上的FileMode,以便在可能的情况下不会覆盖现有文件。 (参见上面的文档。)