【发布时间】:2010-07-20 07:35:20
【问题描述】:
如何在文本文件上读写而不出现“文件已被另一个应用程序使用”的异常??
我尝试了 File.readalltext() 和 File.Appendalltext() 函数。我刚开始使用文件流。
哪种方案最适合我的方案?我也会很感激一些代码片段..
谢谢
【问题讨论】:
标签: c# file-io filestream
如何在文本文件上读写而不出现“文件已被另一个应用程序使用”的异常??
我尝试了 File.readalltext() 和 File.Appendalltext() 函数。我刚开始使用文件流。
哪种方案最适合我的方案?我也会很感激一些代码片段..
谢谢
【问题讨论】:
标签: c# file-io filestream
这与您在打开文件时请求的锁定和共享语义有关。
不要使用File.ReadAllText() 的快捷方式,而是尝试使用System.IO.FileStream 和System.IO.StreamReader / System.IO.StreamWriter。
打开文件:
using (var fileStream = new FileStream(@"c:\myFile", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var streamReader = new StreamReader(fileStream))
{
var someText = streamReader.ReadToEnd();
}
注意FileShare.ReadWrite - 这是告诉流允许分享给其他读者或其他作者。
对于写作尝试类似
using (var fileStream = new FileStream(@"c:\myFile", FileMode.Create, FileAccess.Write, FileShare.Read))
using (var streamWriter = new StreamWriter(fileStream))
{
streamWriter.WriteLine("some text");
}
注意FileShare.Read - 这是告诉流只允许分享给读者。
阅读 System.IO.FileStream 及其构造函数重载,您可以准确地调整它的行为方式以满足您的目的。
【讨论】:
FileShare.Read,而不是FileShare.Write
您需要确保该文件没有被任何其他应用程序使用。
使用您自己的应用程序,您无法在读取之间不关闭流的情况下多次读取文件。
您需要找出为什么文件在使用中 - 像 FileMon 这样的工具可以帮助您找出原因。
【讨论】: