CreateFile () не удалось с GetLastError () = 5 - PullRequest
0 голосов
/ 25 августа 2011

Я написал пример приложения для чтения файла из другого файла. Когда я запускаю эту форму приложения на виртуальной машине, мне отказывают в доступе. Ниже приведен код.

int _tmain(int argc, _TCHAR* argv[])
{
    WCHAR *wcsPath = L"\\\\150.160.130.22\\share\\123.XML";

    HANDLE hFile = CreateFileW(wcsPath,
                               GENERIC_READ,
                               FILE_SHARE_READ,
                               NULL,
                               OPEN_EXISTING,
                               0,
                               0);

    if (NULL == hFile)
    {
        printf("failed - %d", GetLastError());
    }

    return 0;
}

Пожалуйста, дайте мне знать о любых изменениях.

Ответы [ 3 ]

8 голосов
/ 25 августа 2011

Код ошибки 5 означает «Отказано в доступе». Вам следует проверить права доступа вашего пользователя.

1 голос
/ 25 августа 2011

Мне кажется, документация для CreateFile содержит ответ.

может быть , что ваш dwShareMode вызывает проблему. Использование FILE_SHARE_READ говорит: «разрешить другим пользователям открывать файл для чтения». Если вы не укажете FILE_SHARE_WRITE`, то другие средства открытия не смогут открыть файл для записи - ваш вызов предотвратит это.

Но CreateFile, как я полагаю, также завершается ошибкой, когда предыдущая программа нарушала его. Если это так, то если другое приложение уже имеет файл, открытый для доступа на запись, то ваш вызов CreateFile завершится неудачно, если вы укажете dwShareMode = FILE_SHARE_READ. Ты видишь? Вам может потребоваться указать FILE_SHARE_WRITE | FILE_SHARE_READ для этого параметра dwShareMode.

Попробуй.

1 голос
/ 25 августа 2011

Вывод ошибки CreateFileW () равен INVALID_HANDLE_VALUE, а не NULL.Теперь NULL определенно звучит как неправильное значение и для дескриптора файла, но все же.

Является ли вставленный фрагмент кода именно содержимым вашей программы или пересказом?

РЕДАКТИРОВАТЬ: я вижуВ этом участвует виртуальная машина.Можете ли вы открыть файл в Блокноте с виртуальной машины, на которой запущена программа и которая выдает ошибку ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...