Я замечаю проблему, которая накопилась несколько раз за эти годы и, кажется, происходит много в соответствии с 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?"
Вы запускаете приложение как службу? Или от имени какого-то другого пользователя? Это может быть проблема с правами доступа. Учетные данные, которые оно использует, могут не иметь разрешения на чтение этого каталога.
Необходимо восстановить соединение с диском, это автоматически выполняется оболочкой. Раньше это выполнялось с помощью WNetRestoreConnectionW (), но эта функция была удалена в Vista. Думаю, вам нужно сделать это вот так .
Использование пути UNC ( \\ share \ dir \ file
) может быть лучшим лекарством.