0

我想知道 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 时收到错误“句柄已关闭”。

谢谢 :)

4

1 回答 1

1

不会。句柄是在文件打开时获取的,一旦关闭就失效。保持文件打开。

操作系统为分配的任何资源保留一个句柄映射——实际上,只是整数 ID。当您释放(或者,在这种情况下,关闭)资源时,该映射条目将被删除,并且获得的所有锁都被释放。使用该句柄的任何进一步调用都将从对该句柄的地图搜索开始,该句柄已被删除,所以......

不去上班。重新打开文件,或者在必要时找到保持打开状态的方法。真的,虽然 - 我鄙视锁定文件的实现。绝大多数这样做的应用程序真的不必这样做,它只会导致问题。打开文件,加载数据,关闭文件,修改数据并根据需要转储。保持文件打开时间超过单个函数调用的有效理由非常非常少。

于 2019-10-27T00:49:18.517 回答