Dlaczego nie możesz używać znaków specjalnych w nazwie pliku, takich jak „?” Lub „;”?

17

Gdy próbuję zapisać plik, jeśli w nazwie używam znaków specjalnych (takich jak dwukropek, znak zapytania lub wykrzyknik) w systemie Windows, pojawia się komunikat, że nazwa pliku jest nieprawidłowa.

Dlaczego?

użytkownik 284989
źródło
W którym programie próbujesz zapisać plik, a czy w pliku znajduje się obraźliwy znak lub (jak się wydaje) w nazwie pliku?
Jukka K. Korpela,

Odpowiedzi:

22

Istnieje kilka znaków, które mają specjalne znaczenie dla systemu Windows (i systemu DOS, skąd pochodzi większość znaków)

z MSDN :

Nazwa pliku nie może zawierać żadnego z następujących znaków:
\ /: *? „<> |

/jest przełącznikiem (a także separatorem katalogów).
\jest separatorem katalogów.
:jest oznaczeniem napędu.
*i ?są znakami wieloznacznymi używanymi do wyszukiwania.
"to sposób na spację w parametrach.
<i >są przekierowaniami, które pozwalają na wejście i wyjście z programu pochodzącego i przechodzącego do czegoś innego niż ekran / klawiatura.
|jest potokiem, który umożliwia wykorzystanie danych wyjściowych z jednego programu jako danych wejściowych do następnego.

SeanC
źródło
1
Aby wyjaśnić tę odpowiedź, te znaki specjalne mogą zakłócać parsowanie wiersza polecenia (lub ścieżki), jeśli znajdują się w nazwie pliku. Nie ma żadnego wymogu ograniczania nazwy pliku w jakikolwiek sposób (np. Otaczania go cudzysłowami lub spacjami), więc napotkanie takiego specjalnego znaku spowodowałoby niepoprawne parsowanie (tj. Czy specjalny znak jest częścią nazwy pliku lub operatora?).
trociny
1
Można jednak argumentować, że niektóre z tych ograniczeń nie są już konieczne ze względu na obsługę długich nazw plików i znaków cudzysłowu. \ ? *i "są jedynymi naprawdę niezbędnymi w obecnej składni, ponieważ inne znaki są użyteczne tylko poza cudzysłowami. Wyjątkiem jest: co jest przydatne tylko jako druga postać, którą można zakazać, pozwalając na to gdzie indziej. Innymi słowy, nie ma nazwanego pliku A:A letter's story.txt, ale nie ma problemu z plikiem o nazwieSarah: My favorite cat.txt
trlkly
<>"są zarezerwowanymi znakami wieloznacznymi. Windows używa ich do implementacji złożonej semantyki dla DOS *?.podczas tłumaczenia na natywny NT, który ma prostą semantykę *?.. Sześć znaków wieloznacznych jest zarezerwowanych, ponieważ system Windows implementuje dopasowanie symboli wieloznacznych w samym systemie plików, tj. Bezpośrednio w NtQueryDirectoryFilewywołaniu systemowym, bez mechanizmu zmiany znaczenia. W Uniksie symbole wieloznaczne są implementowane na poziomie aplikacji, zwykle przez powłokę, która obsługuje ich ucieczkę.
Eryk Sun,
Uwaga: :zwykle jest zarezerwowana w nazwach plików, ale nie w ścieżkach plików. Jest używany do nazw urządzeń i jako ogranicznik dla strumieni plików (np. „Nazwa_pliku: nazwa_pliku: typ strumienia”). Również niektóre systemy plików takie jak VirtualBox współdzielonym folderze systemu plików pozwalają :, |oraz znaki sterujące ASCII (1-31) w nazwach plików, ale są one zastrzeżone we wszystkich systemach plików z wyjątkiem Microsoft dla systemu plików o nazwie-rurowej.
Eryk Sun,