Создать файл в C#

Я использую CreateFile функция для создания HID Device Handle. Ниже приведен пример кода. После выполнения кода я всегда получаю значение HidHandle -1, чего не должно быть. Любые предложения, пожалуйста.

public int CreateFile(string FileName)
{
    HidHandle = CreateFile(FileName,GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);           
}

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

призвание GetLastWin32Error() возвращает значение 5,

2 ответа

CreateFile возвращается INVALID_HANDLE_VALUE что указывает на неудачу. Вы тогда звоните GetLastWin32Error() который возвращает 5. Это ERROR_ACCESS_DENIED, Другими словами, у вашего процесса недостаточно прав для открытия этого файла.

Попробуйте изменить это на

public int CreateFile(string FileName)
{
  return CreateFile(FileName,GENERIC_READ | GENERIC_WRITE,
       FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);           
}

CreateFile не является экспортируемой функцией из kernel32.dll. Kernel32.dll экспортирует либо CreateFileW, либо CreateFileA.

Вы должны использовать

[DllImport("Kernel32.dll", SetLastError = истина)] частных статических ехЬегп ИНТ CreateFileW( [MarshalAs(UnmanagedType.LPWStr)] строка lpFileName,
UINT dwDesiredAccess,
UINT dwShareMode,
IntPtr lpSecurityAttributes,
UINT dwCreationDisposition,
UINT dwFlagsAndAttributes,
IntPtr hTemplateFile
);

Другие вопросы по тегам