Чому ви не можете використовувати спеціальні символи у назві файлів, наприклад "?" Чи ";"?


17

Коли я намагаюся зберегти файл, якщо я використовую спеціальні символи в імені (наприклад двокрапка, знак питання чи знак оклику) у Windows, я отримую повідомлення про те, що ім'я файлу недійсне.

Чому так?



У якій програмі ви намагаєтеся зберегти файл і чи є кривдним символом у файлі чи (як здається) ім'ям файлу?
Юкка К. Корпела


Відповіді:


22

Є кілька символів, які мають особливе значення для Windows (і для DOS, звідки походить більшість символів)

від MSDN :

Ім'я файлу не може містити жодного з наступних символів:
\ /: *? "<> |

/є комутатором (а також роздільником каталогів).
\є роздільником каталогів.
:є позначенням приводу.
*і ?використовуються для пошуку.
"це спосіб дозволу пробілів у параметрах.
<і >є перенаправлення, які дозволяють вводити та виводити програму з іншого та іншого, ніж екран / клавіатура.
|- це труба, яка дозволяє використовувати вихід з однієї програми як вхід до наступної.


1
Щоб уточнити цю відповідь, ці спеціальні символи можуть заважати аналізувати командний рядок (або шлях), якщо вони були в імені файлу. Немає жодної необхідності розмежовувати ім'я файлу (наприклад, оточувати його лапки або пробіли), тому зустрічаючись із таким спеціальним знаком може спричинити неправильний аналіз (тобто, це особлива частина char імені файлу чи оператор?).
тирса

1
Однак можна стверджувати, що деякі з цих обмежень більше не потрібні через поводження з довгими іменами та котируваннями. \ ? *і "є єдиними, які дійсно потрібні у поточному синтаксисі, оскільки інші символи корисні лише поза лапками. Виняток: який корисний лише як другий символ, який може бути поза законом, дозволяючи його в іншому місці. Іншими словами, жоден файл не названий A:A letter's story.txt, але немає проблеми з ім’ямSarah: My favorite cat.txt
trlkly

<>"є зарезервованими символами wildcard. Windows використовує їх для реалізації складної семантики для DOS *?.при перекладі на рідну NT, яка має просту семантику для *?.. Шість символів підстановки зарезервовано, оскільки Windows реалізує відповідність підстановочних символів у самій файловій системі, тобто безпосередньо в NtQueryDirectoryFileсистемному виклику, без механізму виходу. У Unix символи підстановки реалізуються на рівні програми, як правило, оболонкою, яка підтримує їх виведення.
Eryk Нд

Зауважте, що :зазвичай зарезервовано у файлах файлів, але не у шляхах до файлів. Він використовується для назв пристроїв і як роздільник для потоків файлів (наприклад, "ім'я файлу: потік: потік"). Крім того, деякі файлові системи, такі як файлова система спільної папки VirtualBox, дозволяють :, |і керуючі символи ASCII (1-31) у назви файлів, але вони зарезервовані у всіх файлових системах Microsoft, крім файлової системи з іменованим каналом.
Ерік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.