2

我有两个文件流,它们从不同的文件收集不同的信息:

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);

当两个流写入器都用于获取相同的信息时,如下所示:

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

然后swstreamwriter 从文件中获取信息。我是否错误地设置了我的文件流?

4

2 回答 2

2

假设您没有收到任何异常/错误,并且csvFileFileStream 的正确路径之类的基本内容已通过验证并被发现是正确的:尝试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 有来自文件的信息”:你能更具体吗?这没有意义。

不管是什么情况;使用调试器卢克!

于 2012-07-18T15:24:41.347 回答
0

我想你有两个 StreamWriters 对文件的并发访问冲突。

您使用 . 打开流FileMode.Create。请参阅MSDN 文档(我的亮点):

指定操作系统应该创建一个新文件。如果文件已经存在,它将被覆盖。此操作需要 FileIOPermissionAccess.Write 权限。System.IO.FileMode.Create相当于请求如果文件不存在就使用CreateNew;否则,使用 Truncate

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

可能的解决方案:

  • 确保流仅一个接一个地访问文件,例如通过在第二个流访问文件之前关闭第一个流,例如使用using块。
  • 更改FileMode流上的 ,以便在可能的情况下不会覆盖现有文件。(请参阅上面的文档。)
于 2012-07-18T15:36:45.053 回答