У цьому випадку, очевидно, мова йшла про особливий сенс, aux
успадкований з часів DOS , як правильно вказав Геннес . Однак для читачів, які спотикаються про це в майбутньому, я хотів би додати ще один можливий випадок, коли така поведінка може бути помічена.
Ось тоді було створено файл із крапкою. Є і більш екзотичні випадки. Але це filename.ext.
було б таке ім'я файлу і його не можна було нормально видалити з підсистеми Win32. Ось тут і приходить фокус від Karan . Він / він використовує ім'я, яке перед тим, як перейти на шар під підсистемою Win32, буде змінено з своєї \\?\C:\...
форми на "рідну" (це також бачать драйвери фільтрів файлової системи) форма \??\C:\...
. Тоді як залежно від версії Windows, це може бути так званий об'єктний каталог (використовуйте WinObj від Sysinternals / Microsoft, щоб зазирнути в область імен менеджера об'єктів) або символічне посилання (не плутати з ідентично названим об'єктом у NTFS з Vista) до іншого каталогу об'єктів, наприклад\DosDevices
. Останнє - це лише одне ім’я та описує частину простору імен менеджера об'єктів, видиму процесам Win32 за замовчуванням. Щоб отримати докладніші відомості, ознайомтеся з серією книг Windows Internals або прочитайте інформацію про розбір шляхів, зокрема, на Google Project Project Zero (Поточний посібник з конвертації шляху Win32 до NT) . Зокрема, ви можете звернути увагу на різницю між просторами імен файлів Win32 та просторами імен пристроїв Win32 .
Тепер, як можна створити такий файл в першу чергу? Існує кілька можливостей.
- програма Win32, яка використовує
\\?\X:
префікс для імен шляхів, щоб розширити доступну довжину шляху з 260 символів до приблизно 32767 символів (див. виноску 1!), створила файл в першу чергу, тим самим обійшовши деякі обмеження підсистеми Win32.
- програма, що вкорінена в іншій підсистемі. Була створена колишня підсистема POSIX (пізніше Interix тепер SUA), підсистема OS / 2 (давно минула, але існувала на NT 3.51) або якийсь шар, який не є точно підсистемою в сенсі Windows (Cygwin, наскільки мені відомо) файл або папку. Так само WSL (підсистема Windows для Linux) в Windows 10 тепер є ще одним кандидатом.
- інша операційна система створила його (наприклад, паралельне завантаження Linux).
- це файл на мережевій папці, розміщеній на сервері, який не є Windows.
Останні два пункти також натякають на один із згаданих способів усунення: завантажте живий компакт-диск, який не є Windows, та видаліть файли (файли).
Проблема може насправді порівнятись із випадком, коли стара програма Unicode Win32 стикається з назви файлів з декількох сторінок коду. Часто він не зможе "знайти" деякі з них, оскільки кожна відповідна кодова сторінка ANSI може вміщувати лише 256 символів, тоді як UTF-16 (але не її підмножина UCS-2, проте) теоретично може кодувати практично необмежену кількість кодових очок (читайте по темі на unicode.org та Wikipedia ).
Сподіваюсь, це допоможе зрозуміти основні проблеми трохи більше. Не хотів редагувати цю довгу відповідь в одну з інших відповідей, хоча вона лише доповнює їх. Інші відповіді цілком справедливі без цієї.
Виноска 1: максимальна кількість символів на шляху не є абсолютною, оскільки шлях, близький до абсолютного максимуму (32767 символів), може бути розширений як керуючим об'єктом, так і фільтрами файлової системи або самими файловими системами (наприклад, повторно розгорнути точки) .