嗨,我发现一个问题,如果我用FileShare.None打开一个文件然后在读取所有行后在静态类中创建StreamReader它也会释放文件
class Program
{
static void Main(string[] args)
{
using (
var fileStream = new FileStream(
@"SomeShareFolder\File.txt",
FileMode.Open,
FileAccess.Read,
FileShare.None,
512,
FileOptions.None))
{
var lines = fileStream.ReadAllLines();
//HERE THE FILE IS ALREADY RELESEAD so other process now if tries to open with FileStream and FileShare.None there will not be any exception that file is locked
}
}
}
public static class FileStreamExtension
{
public static List<string> ReadAllLines(this FileStream filestream, StringSplitOptions splitOption = StringSplitOptions.RemoveEmptyEntries)
{
var strings = new List<string>();
using (var file = new StreamReader(filestream, Encoding.UTF8, true, 512))
{
string lineOfText;
while ((lineOfText = file.ReadLine()) != null)
{
if (splitOption != StringSplitOptions.RemoveEmptyEntries || !string.IsNullOrEmpty(lineOfText))
{
strings.Add(lineOfText);
}
}
}
return strings;
}
}
Run Code Online (Sandbox Code Playgroud)
原因是你在using内部阻挡ReadAllLines.
在该块的末端StreamReader处理并且还处理下面的块FileStream.
为了避免这种情况,你可以传递leaveOpen = true给StreamReader(最后添加true,见这里):
using (var file = new StreamReader(filestream, Encoding.UTF8, true, 512, true))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |