Win32: обходное решение для GetFileAttributes ()

Я замечаю проблему, которая накопилась несколько раз за эти годы и, кажется, происходит много в соответствии с Windows 7 в нашей текущей сборке.

Когда я тестирую на существование файла, с помощью:: GetFileAttributes (имя файла), я часто возвращаю INVALID_FILE_ATTRIBUTES, и GetLastError () является ERROR_PATH_NOT_FOUND (3).

Однако файл действительно существует, путь существует, объем существует - его H:\Foo\Bar - который является папкой на сетевом ресурсе, который отображается на моей машине на H:.

Если я открываю командное окно, оно видит его. Если я использую Windows Explorer для навигации к той папке, он видит его.

Если я делаю тех прежде, чем запустить наше приложение, мы видим его.

Но если я запускаю наше приложение сначала, после перезагрузки, прежде чем что-либо попыталось к представлению H:\, затем я неоднократно получаю вышеупомянутую ошибку.

Мне всегда казалось, что Windows "помогает" мне путем возврата ERROR_PATH_NOT_FOUND сразу, когда данное отображение доли не было подключено повторно эта сессия (это установлено автоснова соединиться). Это является, само собой разумеется, раздражающим. Есть ли другой вызов API, который я мог делать, чтобы "определить, существует ли файл/папка X?"

7
задан Mordachai 13 April 2010 в 20:04
поделиться

2 ответа

Вы запускаете приложение как службу? Или от имени какого-то другого пользователя? Это может быть проблема с правами доступа. Учетные данные, которые оно использует, могут не иметь разрешения на чтение этого каталога.

4
ответ дан 7 December 2019 в 07:42
поделиться

Необходимо восстановить соединение с диском, это автоматически выполняется оболочкой. Раньше это выполнялось с помощью WNetRestoreConnectionW (), но эта функция была удалена в Vista. Думаю, вам нужно сделать это вот так .

Использование пути UNC ( \\ share \ dir \ file ) может быть лучшим лекарством.

3
ответ дан 7 December 2019 в 07:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: