CreateFile (kernel32)
Last changed: RomanRII-98.208.78.243

.
Summary
Creates or opens a file, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, or pipe.

C# Signature:

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

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

You can use the IntPtr from Createfile with FileStream. This is usefull for opening devices such as Com1:, Lpt1: and Prn.

For example:

IntPtr ptr = CreateFile(filename,access, share, IntPtr.Zero, mode, 0, IntPtr.Zero);

/* Is bad handle? INVALID_HANDLE_VALUE */
if (ptr.ToInt32() == -1)
{
    /* ask the framework to marshall the win32 error code to an exception */
    Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
else
{
    return new FileStream(ptr,access);
}

Another useful thing you can do with the IntrPtr is use it to open a FileStream in an asynchronous manner (Note there is an alternative consturctor for asynchronous FileStream's, but it doesn't seem to work!)

Alternative Managed API:

System.IO.File and System.IO.FileInfo

Documentation
CreateFile on MSDN
Documentation
FileStream on MSDN
Documentation
Marshal on MSDN