Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取被其他应用程序锁定的文本文件的最简单方法_C#_Filestream_Text Files - Fatal编程技术网

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:啊,我想这是有道理的。无论如何,很高兴知道。