Re: Что за шляпа с GetFileAttributes?
От: CaptainFlint http://flint-inc.ru/
Дата: 10.05.24 18:23
Оценка:
Здравствуйте, пффф, Вы писали:

П>
П>template<> inline bool isPathDirectory<std::string>( const std::string &path )
П>{
П>    DWORD attrs = ::GetFileAttributesA(path.c_str());
П>    if (attrs==INVALID_FILE_ATTRIBUTES)
П>    {
П>        return false;
П>    }

П>    if (attrs & FILE_ATTRIBUTE_DIRECTORY)
П>    {
П>        return true;
П>    }

П>    return false;
П>}
П>


П>с какого-то перепугу возвращает фолс.


П>В отладчике посмотрел, GetFileAttributesA возвращает 0x2020



П>Смотрю свойства в проводнике — а он мне говорит, что это папка с файлами, и что у неё стоит атрибут "только для чтения"


Для информации: в Проводнике атрибуты каталогов не отображаются, там консолидируются атрибуты внутри лежащих файлов.


Касательно исходной проблемы, ситуация странная, конкретных идей относительно источника проблемы нет. Я бы начал последовательно устранять все потенциальные источники:
а) Избавиться от всяких string'ов и преобразований, передать тупо константную сишную строку с целевым путём. Вообще, лучше написать отдельную сишную прожку, которая вызывает эту функцию и печатает ответ, и больше вообще ничего не делает. А то мало ли какие сайд-эффекты от другого кода могут быть.
б) Проверить GetFileAttributesW.
в) Проверить GetFileAttributesExA/W.
г) Убедиться, что это не reparse point. Конечно, должен был бы присутствовать FILE_ATTRIBUTE_REPARSE_POINT=0x400, но шут его знает…
д) Диск F: — самый обычный локальный раздел, NTFS? Промежуточные элементы этого пути тоже не являются какими-нибудь точками монтирования или симлинками чёрт знает куда?
Почему же, ё-моё, ты нигде не пишешь «ё»?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.