【问题标题】:What is SafeFileHandle in C# and when should I use it?什么是 C# 中的 SafeFileHandle,我应该什么时候使用它?
【发布时间】:2019-10-26 05:51:11
【问题描述】:

虽然我还在学习System.IO,但在FileStreamclass的构造函数中,我发现有类型为SafeFileHandle的重载构造函数,我尝试在互联网和MSDN文档中搜索,但我什么都看不懂,发现甚至 陌生字样,比如IntPtr,谁能给我解释一下?

public FileStream (Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize, bool isAsync);

有人能解释一下吗,或者有什么好的网站可以学习吗..?

【问题讨论】:

    标签: c# safefilehandle


    【解决方案1】:

    https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.safehandles.safefilehandle?view=netframework-4.8

    http://www.dotnetframework.org/default.aspx/DotNET/DotNET/8@0/untmp/whidbey/REDBITS/ndp/clr/src/BCL/Microsoft/Win32/SafeHandles/SafeFileHandle@cs/1/SafeFileHandle@cs

    https://csharp.hotexamples.com/examples/-/SafeFileHandle/-/php-safefilehandle-class-examples.html

    https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=2ahUKEwizlPG3ornlAhVFCKwKHUl9DxIQFjABegQIAxAB&url=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fdotnet%2Fapi%2Fmicrosoft.win32.safehandles.safefilehandle.-ctor&usg=AOvVaw3M0YPCVH1439KghalbcDfG

    https://docs.microsoft.com/en-us/dotnet/api/system.io.filestream.safefilehandle?view=netframework-4.8

    https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.safehandles.safefilehandle?redirectedfrom=MSDN&view=netframework-4.8

    这些链接提供有关SafeFileHandle 的信息,有些提供源代码。

    您也可以查看:How to Close SafeFile Handle properly

    IntPtr...

    这是一个“本机(特定于平台)大小的整数”。它在内部表示为 void* 但公开为整数。您可以在需要存储非托管指针并且不想使用不安全代码时使用它。 IntPtr.Zero 实际上是 NULL(空指针)。

    Pointer...

    通常(跨编程语言),指针是表示内存中物理位置的数字。空指针(几乎总是)指向 0,并且被广泛认为是“不指向任何东西”。由于系统支持的内存量不同,因此保存该数字并不总是需要相同数量的字节,因此我们将其称为“本机大小整数”,它可以保存任何特定系统上的指针。

    SafeFileHandlekernel32...

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

    更多 SafeFileHandlekernel32...

    [DllImport("kernel32.dll", SetLastError = true)]
    static extern SafeFileHandle CreateFile(
    string lpFileName,
    uint dwDesiredAccess,
    uint dwShareMode,
    IntPtr lpSecurityAttributes,
    uint dwCreationDisposition,
    uint dwFlagsAndAttributes,
    IntPtr hTemplateFile);
    private SafeFileHandle handleValue = null;
    handleValue = CreateFile(
    Path,
    GENERIC_WRITE,
    0,
    IntPtr.Zero,
    OPEN_EXISTING,
    0,
    IntPtr.Zero);
    

    不过,如果您尝试打开 File,请使用 System.IO Controls

    简单地打开一个文件并读取它的所有文本:

    richTextBox1.Text = File.ReadAllText(yourfilename);

    您可以将richTextBox1 更改为您的Control 的名称。

    我希望我能帮助你,Soft 教授 :)

    【讨论】:

    • 哦,谢谢兄弟,但是我在搜索时已经打开了这个链接,我无法理解,如果你知道什么是安全文件句柄 IntPtr,你能用你的风格向我解释一下吗,我可能从你那里理解兄弟:)
    • 我用更多链接更新了我的答案 :) 我对SafeFileHandle没有那么多经验
    • 哦,我不知道该说什么谢谢你的关心,我在等你:)
    • 我再一次更新了我的答案(尽我所能详细说明)
    • 如果您需要更多信息,请询问:)
    猜你喜欢
    • 2011-01-18
    • 2011-08-18
    • 2017-03-21
    • 1970-01-01
    • 2010-09-05
    相关资源
    最近更新 更多