Я хочу открыть дескриптор каталога, чтобы я мог наблюдать за этим каталогом на предмет изменений файла. Я написал простую оболочку класса поверх winapi, и вот как я устанавливаю путь к каталогу перед запуском наблюдения:
bool SetDirectory(const std::string& dirname)
{
HANDLE dirHandleNew = CreateFile(
dirname.c_str(),
// Just normal reading
FILE_GENERIC_READ,
// Share all, do not lock the file
FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (INVALID_HANDLE_VALUE != dirHandleNew)
{
_dirHandle = dirHandleNew;
return true;
}
else
{
_dirHandle = 0;
RLog("Cannot open directory %s for filesystem watching. Win error: %d (%s)", dirname.c_str(), GetLastError(), GetLastErrorAsString().c_str());
return false;
}
}
Ошибка всегда:
Cannot open directory D:\tools for filesystem watching. Win error: 5 (Access is denied.)
Я пробовал разные папки на разных томах, чтобы увидеть, действительно ли это проблема с разрешениями, но это не так. D:\tools
на моем ПК - обычная папка, доступная всем пользователям. Но, как я уже сказал, я пробовал и другие папки, ошибка всегда одна и та же.
Я также попытался вместо этого открыть с FILE_LIST_DIRECTORY
(мне нужен только каталог dir) и GENERIC_READ
. Ошибка осталась прежней.
Может быть, параметры CreateFile
неверны?