Здравствуйте, пффф, Вы писали:
П>П>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? Промежуточные элементы этого пути тоже не являются какими-нибудь точками монтирования или симлинками чёрт знает куда?