根据MSDN 文档FileStream.SafeFileHandle
:
SafeFileHandle 属性自动刷新流并将当前流位置设置为 0。这允许使用此属性返回的 SafeFileHandle 移动文件或由另一个流重置流位置。
但是,我的测试似乎表明流位置没有改变。
考虑以下代码:
using System;
using System.IO;
namespace Demo
{
internal static class Program
{
public static void Main()
{
Directory.CreateDirectory("C:\\TEST");
var buffer = new byte[1024];
using (var file = new FileStream("C:\\TEST\\TEST.BIN", FileMode.Create))
{
file.Write(buffer, 0, buffer.Length);
Console.WriteLine(file.Position); // Prints 1024
var dummy = file.SafeFileHandle;
// dummy.Dispose(); // Uncommenting this line will make the next line throw.
Console.WriteLine(file.Position); // Still prints 1024!
}
}
}
}
如果访问SafeFileHandle
确实将当前流位置重置为 0,我预计第二个 WriteLine() 会打印 0。
我有其他测试,我实际使用SafeFileHandle
Windows API ReadFile() 和 WriteFile() 方法,即使那样它似乎也没有改变文件指针。
我有一些使用的代码SafeFileHandle
,所以流位置是否会改变对我来说非常重要!
我误解了文档,还是不正确?或者它有时会改变流的位置?(那将是一场噩梦!)