На днях столкнулся с вот такой оборжакой. Скачал, значит, полсотни серий всемирно известного сериала "M.A.S.H." и собрался переложить их в более удобное место, чем папка Download. Окей, запускаю FAR, создаю папочку с именем "M.A.S.H.", в ней - ещё две папки, раскладываю в них файлы - всё ништяк. Потом дёрнуло меня перегрузиться в WinXP. В XP пытаюсь зайти в эту папку, получаю сообщение "А хрен тебе по всей морде!" Предполагаю, что опять права доступа, долбись они конём, недостаточные. Опять гружу Win7, клацаю свойства папки, лезу на вкладку, где все права. А вот нету там никаких прав! И вообще ничего нету, кроме красного кружочка с буквой Х и сообщения, что права недоступны или что-то типа того. Предполагаю, что к винту в гости пожаловал писец. Запускаю FAR, захожу в папку, потом в другую папку, по F3 файлы читаются без вопросов. Тихо слезаю с измен, переименовываю папку в просто MASH - все проблемы исчезают. Я понимаю, что глюк. И даже догадываюсь, примерно в чём. Но, блин, какого, извиняюсь, мужского полового органа, Win7 позволяет создать папку с не очень корректным именем (с точкой на конце), чтобы после этого отказаться с ней работать?!
Одобряю подобные глюки: ИМХО - нефиг давать файлам дурацкие имена с кучей пробелов и точек. У меня на харде музыка хранится вот так: АгатаКристи КовёрВертолёт.mp3 REM LosingMyReligion.mp3 Desireless VoyageVoyage.flv McHammer UCantTouchThis.flv ... Компактно и понятно, гарантия от глюков. Не то что в дешёвых MP3-сборниках: 153.Мультфильмы_-_Радиосигнал.mp3 098.Токио_-_Кто_я_без_тебя.mp3 Мне не лень было и я пару часов сидел и тупо всё перебивал в Мультфильмы Радиосигнал.mp3 Токио КтоЯБезТебя.mp3 и т.д...
Paguo_86PK, мне вас жаль. имхо, система должна хендлеть любые фаелы и папки, есле не хендлет - глюк. криминала в папке с точками в имени не вижу, сам не раз такие создавал и нормально они открывались.
CyberManiac А при чём тут win7? Папку с точками на конце можно создать и в XP, и в W7, не так ли? То, что эксплорер не умеет работать с такими папками – это следствие ограничения именоваемой подсистемы win32; Система же в целом, и ntfs в частности, обеспечивают поддержку большего множества именований. Т.е. эксплорер не работает корректно с папками с точкой на конце – однако из него такую папку и не создашь, насколько нам известно; Если же один игнорирует ограничения win32 и создаёт такую папку с помощью, скажем, Far'а, то подразумевается, что и работать с ней он будет из Far'а, и не удивляться, почему эксплорер показывает фе.
Sol_Ksacap Возможно, они эту шнягу не стали блокировать на самом верхнем уровне API на случай, если какие-нибудь извращенцы напишут дров для работы с хрюниксовыми разделами. Но почему, блин, в процессе создания файла именно на NTFS система не даёт отлуп? Там-то такие имена однозначно некорректны, поскольку не соответствуют правилам именования файлов от МС.
Был под ХР прикол в ДОС режиме создал файл с кавычкой в имени " Система наотрез его отказывалась удалять
Paguo_86PK Мда, а воспользоваться какой-нибудь прогой для правки тегов не судьба? В том же фубаре можно всё переименовать файл было. Там что-то вроде принтфа можно использовать .... CyberManiac О, мне нравиться МЭШ, правда 5-6 сезоны не фонтан. А вас, что 2000 стоит?
FAR использует нативные ф-ции. А винда ф-ции API верхнего уровня. а внативе можно типа такого, например (тут частный случай для FAT-а): Код (Text): bool MkNoremoveDir(LPWSTR lpDirPathName) { UNICODE_STRING NameU; HANDLE DirectoryHandle; IO_STATUS_BLOCK ioSB; OBJECT_ATTRIBUTES ObjAttr; RtlInitUnicodeString(&NameU,lpDirPathName); wcscat(NameU.Buffer,L"\\..\\"); NameU.Length+=4*sizeof(WCHAR); InitializeObjectAttributes(&ObjAttr,&NameU,OBJ_CASE_INSENSITIVE,NULL,NULL); if(NT_SUCCESS(NtCreateFile (&DirectoryHandle,FILE_LIST_DIRECTORY | SYNCHRONIZE | FILE_OPEN_FOR_BACKUP_INTENT, &ObjAttr,&ioSB,NULL,FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY,FILE_SHARE_READ,FILE_CREATE,FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT,NULL,0))) { NtClose(DirectoryHandle); return true; } return false; } //Call example: MkNoremoveDir(L"\\??\\C:\\Noremove");