C# 读取被其他应用程序锁定的文本文件的最简单方法
我一直在使用C# 读取被其他应用程序锁定的文本文件的最简单方法,c#,filestream,text-files,C#,Filestream,Text Files,我一直在使用File.ReadAllText()打开CSV文件,但每次我忘记在Excel中关闭文件时,应用程序都会抛出一个异常,因为它无法访问该文件 (对我来说似乎很疯狂,我的意思是ReadAllText中的阅读内容似乎非常清晰) 我知道有File.Open,但有没有一种“中间”方法不涉及缓冲区和字符数组?如果您想指定文件共享标志以打开正在使用的文件,那么您必须使用File.Open()。我想您只需要以下几点: using (var fileStream = new FileStream("fo
File.ReadAllText()
打开CSV文件,但每次我忘记在Excel中关闭文件时,应用程序都会抛出一个异常,因为它无法访问该文件
(对我来说似乎很疯狂,我的意思是ReadAllText中的阅读内容似乎非常清晰)
我知道有File.Open,但有没有一种“中间”方法不涉及缓冲区和字符数组?如果您想指定文件共享标志以打开正在使用的文件,那么您必须使用File.Open()。我想您只需要以下几点:
using (var fileStream = new FileStream("foo.bar", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var textReader = new StreamReader(fileStream))
{
var content = textReader.ReadToEnd();
}
FileAccess.Read
参数非常重要,它表示您只想读取文件。当然,即使要这样做,文件也必须由Excel以读取共享模式打开(请参见.NET中的FileShare
enum)。我还没有测试,所以我不能保证Excel能做到这一点,尽管我希望它能做到。是Excel打开了文件,所以OP无法控制这一点。他只能希望Excel以读共享模式打开它,并且自己以只读方式打开它。谢谢,我能在{}之间放置什么最短的东西来从文件中取出整个字符串?(我确实说过我很懒)@Noldorin,谢谢。这是缺失的一环。我查看了FileStream上所有可用的方法,不明白。@Noldorin:关于信息,我开始尝试,您必须包含FileShare.ReadWrite参数才能使其与Excel一起工作。@Benjol:啊,我想这是有道理的。无论如何,很高兴知道。