파일 이름에“?”또는“;”과 같은 특수 문자를 사용할 수없는 이유는 무엇입니까?


17

파일을 저장할 때 Windows에서 이름에 콜론, 물음표 또는 느낌표와 같은 특수 문자를 사용하면 파일 이름이 잘못되었다는 메시지가 나타납니다.

왜 그런 겁니까?



어떤 프로그램에서 파일을 저장하려고하는데 파일에 문제가있는 문자입니까, 아니면 파일 이름에 문제가 있습니까?
Jukka K. Korpela


답변:


22

Windows (및 대부분의 문자가 원래 유래 된 DOS)에 특별한 의미를 갖는 여러 문자가 있습니다.

에서 MSDN :

파일 이름은 다음 문자를 포함 할 수 없습니다.
\ / : *? "<> |

/스위치 (및 디렉토리 구분자)입니다.
\디렉토리 구분 기호입니다.
:드라이브 지정자입니다.
*그리고 ?와일드 카드 검색에 사용됩니다.
"매개 변수에 공백을 허용하는 방법입니다.
<>입력에서 온과에 갈 수있는 프로그램의 출력을 허용 재 지정, 화면 / 키보드가 아닌 다른 무언가가 있습니다.
|한 프로그램의 출력을 다음 프로그램의 입력으로 사용할 수있는 파이프입니다.


1
이 답변을 명확히하기 위해 이러한 특수 문자는 파일 이름에 있으면 명령 줄 (또는 경로)을 구문 분석하는 데 방해가 될 수 있습니다. 파일 이름을 어떤 식 으로든 구분할 필요는 없습니다 (예 : 따옴표 나 공백으로 묶어야 함). 이러한 특수 문자를 발견하면 구문 분석이 잘못 될 수 있습니다 (예 : 파일 이름이나 연산자의 특수 문자 부분입니까?).
톱밥

1
그러나 긴 파일 이름 및 따옴표를 처리하기 때문에 이러한 제한 중 일부가 더 이상 필요하지 않을 수도 있습니다. \ ? *그리고 "다른 문자가 인용 부호의 도움이 밖에로서, 현재 구문에서 유일하게 사람이 정말 필요합니다. 예외는 다음과 같습니다. 두 번째 문자로만 사용할 수 있으며 다른 곳에서는 허용 할 수 있습니다. 다시 말해, 파일 이름 A:A letter's story.txt은 없지만, 파일 이름 에는 문제가 없습니다Sarah: My favorite cat.txt
trlkly

<>"예약 된 와일드 카드 문자입니다. Windows는 이들을 사용하여 *?.간단한 의미론을 가진 네이티브 NT로 변환 할 때 DOS에 대한 복잡한 의미론을 구현합니다 *?.. 6 개의 와일드 카드 문자는 Windows가 파일 시스템 자체에서 (즉, NtQueryDirectoryFile시스템 호출 에서 직접 이스케이프 메커니즘없이) 와일드 카드 일치를 구현하기 때문에 예약되어 있습니다. Unix에서 와일드 카드는 일반적으로 이스케이프를 지원하는 셸을 통해 응용 프로그램 수준에서 구현됩니다.
Eryk Sun

참고 :일반적으로하지만 파일 경로에서 파일 이름에 예약되어 있습니다. 장치 이름과 파일 스트림의 구분자로 사용됩니다 (예 : "filename : streamname : streamtype"). 또한, 같은 버추얼 박스와 같은 일부 파일 시스템 공유 폴더의 파일 시스템을 허용 :, |및 파일 이름에 ASCII 제어 문자 (1-31), 그러나 그들은 명명 된 파이프 파일 시스템을 제외하고 마이크로 소프트의 파일 시스템을 모두 보유하고 있습니다.
Eryk Sun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.