我可以在 FileStream 在 C# 中关闭句柄后重新打开句柄吗?
Can i re-open a handle after FileStream close it in c#?
我想知道我是否可以在 FileStream 关闭句柄后重新打开它??
这是我的代码
static void Main(string[] args)
{
string path = "Hello";
SafeFileHandle handle = File.Open(path, FileMode.OpenOrCreate).SafeFileHandle;
using (FileStream fs1 = new FileStream(handle, FileAccess.ReadWrite))
{
// do some work
}
using (FileStream fs2 = new FileStream(handle, FileAccess.ReadWrite))
{
// do some work
}
Console.ReadKey();
}
我在声明 fs2 时收到错误“句柄已关闭”。
谢谢:)
没有。该句柄在文件打开时获得,关闭后失效。只需保持文件打开即可。
OS 为分配的任何资源保留一个句柄映射——实际上,只是整数 ID。当您释放(或者,在本例中,关闭)资源时,该映射条目将被删除,并且获得的所有锁都将被释放。使用该句柄的任何进一步调用都将从映射搜索句柄开始,该句柄已被删除,因此...
不会工作。要么重新打开文件,要么在必要时找到保持打开状态的方法。不过,真的 - 我鄙视锁定文件的实现。绝大多数执行此操作的应用程序实际上不必这样做,而且只会导致问题。打开文件、加载数据、关闭文件、修改数据并根据需要转储。将文件保持打开的时间超过一次函数调用的时间非常非常少。
我想知道我是否可以在 FileStream 关闭句柄后重新打开它??
这是我的代码
static void Main(string[] args)
{
string path = "Hello";
SafeFileHandle handle = File.Open(path, FileMode.OpenOrCreate).SafeFileHandle;
using (FileStream fs1 = new FileStream(handle, FileAccess.ReadWrite))
{
// do some work
}
using (FileStream fs2 = new FileStream(handle, FileAccess.ReadWrite))
{
// do some work
}
Console.ReadKey();
}
我在声明 fs2 时收到错误“句柄已关闭”。
谢谢:)
没有。该句柄在文件打开时获得,关闭后失效。只需保持文件打开即可。
OS 为分配的任何资源保留一个句柄映射——实际上,只是整数 ID。当您释放(或者,在本例中,关闭)资源时,该映射条目将被删除,并且获得的所有锁都将被释放。使用该句柄的任何进一步调用都将从映射搜索句柄开始,该句柄已被删除,因此...
不会工作。要么重新打开文件,要么在必要时找到保持打开状态的方法。不过,真的 - 我鄙视锁定文件的实现。绝大多数执行此操作的应用程序实际上不必这样做,而且只会导致问题。打开文件、加载数据、关闭文件、修改数据并根据需要转储。将文件保持打开的时间超过一次函数调用的时间非常非常少。