0

我在 .NetCore 控制台应用程序中有以下课程。此类具有 FileStream 和 SafeFileHandle 字段。我正在使用 pInvoke 创建文件并将结果分配给 SafeFileHandle 实例。

这个类应该有终结器实现吗?

 public class MyClass : IDisposable
 {
        private SafeFileHandle m_handleValue;
        private FileStream m_fileStream;


        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess,
            uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,
            uint dwFlagsAndAttributes, IntPtr hTemplateFile);



        public void CreateFile()
        {
            m_handleValue = CreateFile(m_path,
                GENERIC_WRITE | GENERIC_READ,
                SHARE_MODE_READ_WRITE, 
                IntPtr.Zero,
                OPEN_EXISTING,
                FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, 
                IntPtr.Zero);
            m_fileStream = new FileStream(m_handleValue, FileAccess.ReadWrite);
        }

        public void CloseStream()
        {
            m_handleValue.Close();
        }

        public void Write(long offset, byte[] data)
        {
            m_fileStream.Seek(offset, SeekOrigin.Begin);
            m_fileStream.Write(data, 0, data.Length);
        }

        public byte[] Read(long offset, int length)
        {
            var buffer = new byte[length];
            m_fileStream.Seek(offset, SeekOrigin.Begin);
            m_fileStream.Read(buffer, 0, length);

            return buffer;
        }

    public void Dispose()
    {
        m_handleValue?.Dispose();
        m_fileStream?.Dispose();
    }
}
4

1 回答 1

1

不,使用的要点之一SafeFileHandle包含清理与句柄相关的非托管资源的终结器。

于 2020-04-22T12:08:45.890 回答