SafeFileHandle 생성자
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
SafeFileHandle() |
파일 핸들 주위에 를 SafeFileHandle 만듭니다. |
SafeFileHandle(IntPtr, Boolean) |
SafeFileHandle 클래스의 새 인스턴스를 초기화합니다. |
SafeFileHandle()
- Source:
- SafeFileHandle.Unix.cs
- Source:
- SafeFileHandle.Unix.cs
- Source:
- SafeFileHandle.Unix.cs
파일 핸들 주위에 를 SafeFileHandle 만듭니다.
public:
SafeFileHandle();
public SafeFileHandle ();
Public Sub New ()
적용 대상
SafeFileHandle(IntPtr, Boolean)
- Source:
- SafeFileHandle.cs
- Source:
- SafeFileHandle.cs
- Source:
- SafeFileHandle.cs
SafeFileHandle 클래스의 새 인스턴스를 초기화합니다.
public:
SafeFileHandle(IntPtr preexistingHandle, bool ownsHandle);
public SafeFileHandle (IntPtr preexistingHandle, bool ownsHandle);
new Microsoft.Win32.SafeHandles.SafeFileHandle : nativeint * bool -> Microsoft.Win32.SafeHandles.SafeFileHandle
Public Sub New (preexistingHandle As IntPtr, ownsHandle As Boolean)
매개 변수
- ownsHandle
- Boolean
종료 단계에서 안정적으로 핸들을 해제하려면true
이고, 안정적으로 해제되지 않게 하려면 false
입니다(권장되지 않음).
예제
다음 예제에서는 클래스 및 관리 CreateFile
되지 않는 함수를 SafeFileHandle 사용하여 파일을 여는 방법을 보여 줍니다.
using System;
using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;
using System.ComponentModel;
class SafeHandlesExample
{
static void Main()
{
try
{
UnmanagedFileLoader loader = new UnmanagedFileLoader("example.xml");
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.ReadLine();
}
}
class UnmanagedFileLoader
{
public const short FILE_ATTRIBUTE_NORMAL = 0x80;
public const short INVALID_HANDLE_VALUE = -1;
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
public const uint CREATE_NEW = 1;
public const uint CREATE_ALWAYS = 2;
public const uint OPEN_EXISTING = 3;
// Use interop to call the CreateFile function.
// For more information about CreateFile,
// see the unmanaged MSDN reference library.
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess,
uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,
uint dwFlagsAndAttributes, IntPtr hTemplateFile);
private SafeFileHandle handleValue = null;
public UnmanagedFileLoader(string Path)
{
Load(Path);
}
public void Load(string Path)
{
if (Path == null && Path.Length == 0)
{
throw new ArgumentNullException("Path");
}
// Try to open the file.
IntPtr ptr = CreateFile(Path, GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
handleValue = new SafeFileHandle(ptr, true);
// If the handle is invalid,
// get the last Win32 error
// and throw a Win32Exception.
if (handleValue.IsInvalid)
{
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
}
}
public SafeFileHandle Handle
{
get
{
// If the handle is valid,
// return it.
if (!handleValue.IsInvalid)
{
return handleValue;
}
else
{
return null;
}
}
}
}
Imports Microsoft.Win32.SafeHandles
Imports System.Runtime.InteropServices
Imports System.ComponentModel
Class SafeHandlesExample
Shared Sub Main()
Try
Dim loader As New UnmanagedFileLoader("example.xml")
Catch e As Exception
Console.WriteLine(e)
End Try
Console.ReadLine()
End Sub
End Class
Class UnmanagedFileLoader
Public Const FILE_ATTRIBUTE_NORMAL As Short = &H80
Public Const INVALID_HANDLE_VALUE As Short = -1
Public Const GENERIC_READ As Long = &H80000000
Public Const GENERIC_WRITE As UInteger = &H40000000
Public Const CREATE_NEW As UInteger = 1
Public Const CREATE_ALWAYS As UInteger = 2
Public Const OPEN_EXISTING As UInteger = 3
' Use interop to call the CreateFile function.
' For more information about CreateFile,
' see the unmanaged MSDN reference library.
<DllImport("kernel32.dll", SetLastError:=True, CharSet:=CharSet.Unicode)> _
Private Shared Function CreateFile(ByVal lpFileName As String, ByVal dwDesiredAccess As System.UInt32, ByVal dwShareMode As System.UInt32, ByVal lpSecurityAttributes As IntPtr, ByVal dwCreationDisposition As System.UInt32, ByVal dwFlagsAndAttributes As System.UInt32, ByVal hTemplateFile As IntPtr) As IntPtr
End Function
Private handleValue As SafeFileHandle = Nothing
Public Sub New(ByVal Path As String)
Load(Path)
End Sub
Public Sub Load(ByVal Path As String)
If Path Is Nothing AndAlso Path.Length = 0 Then
Throw New ArgumentNullException("Path")
End If
' Try to open the file.
Dim ptr As IntPtr = CreateFile(Path, GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)
handleValue = New SafeFileHandle(ptr, True)
' If the handle is invalid,
' get the last Win32 error
' and throw a Win32Exception.
If handleValue.IsInvalid Then
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error())
End If
End Sub
Public ReadOnly Property Handle() As SafeFileHandle
Get
' If the handle is valid,
' return it.
If Not handleValue.IsInvalid Then
Return handleValue
Else
Return Nothing
End If
End Get
End Property
End Class
추가 정보
적용 대상
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET