2017-04-12 1 views
5

콘솔 응용 프로그램에 인수로 여러 경로를 전달하려고했지만 "경로에 잘못된 문자가 있음"오류가 발생합니다. 어떤 것에서는 인수 "C:\test\"의 마지막 두 문자를 이스케이프 된 큰 따옴표로 오해하고있는 것으로 보입니다. 나는 새로운 빈 콘솔과 같이 C#에서 응용 프로그램을 만드는 경우 예를 들어C#이 부분적으로 명령 줄 인수를 이스케이프 처리하지 않는 것처럼 보이는 이유는 무엇입니까?

은 : 프로젝트 속성에서

static void Main(string[] args) 
{ 
    Console.WriteLine(args[0]); 
    Console.ReadLine(); 
} 

과, -> 디버그 그래서 다음과 같은 명령 행 인수를 추가

Project properties showing CLI Argument: "C:\test\"

는 내 출력은 다음과 같습니다

Command prompt showing output: C:\test"

값이 평가/취소되지 않은 경우 \t이 탭이되지 않는 이유는 무엇입니까?

값이 평가되지 않았거나 이스케이프 처리되지 않은 경우 \"이 큰 따옴표가되는 이유는 무엇입니까?

(참고 : 나는 인수가 부분적으로 평가 것으로 보인다 이유를 내가 이해하는 도움을 부탁 해요 백 슬래시 등 후행 트리밍, 예를 들어,이 오류를 해결할 수있어)

+0

관련 http://stackoverflow.com/questions/17168961/how-do-i-escape-in-verbatim-string 및 http://stackoverflow.com/questions/15932279/escaping-command-line-arguments- in-c-sharp-for-urls-and-local-and-network-paths –

답변

5

은 틀림이 관련 Microsoft C 명령 행 인수. 그러나 C#에서도이 규칙이 준수되는지 테스트 한 바 있습니다. 명령 줄 인수는 응용 프로그램에 전달되기 전에 string args[] 배열로 구분됩니다.

Parsing C Command-Line Arguments

  • 인수는 공백이나 탭 중 하나입니다 공백에 의해 구분됩니다.

  • 큰 따옴표로 묶인 문자열은 안에 포함 된 공백에 관계없이 단일 인수로 해석됩니다. 따옴표 붙은 문자열은 인수에 포함될 수 있습니다. 캐럿 (^)은 이스케이프 문자 또는 구분 기호로 인식되지 않습니다.

  • 앞에 백 슬래시가 붙은 큰 따옴표 \ "는 리터럴 큰 따옴표 (")로 해석됩니다.

  • 백 슬래시는 큰 따옴표 바로 앞에 오는 경우가 아니면 문자 그대로 해석됩니다.

  • 짝수 개의 백 슬래시 뒤에 큰 따옴표가 오는 경우 모든 백 슬래시 쌍 (\)에 대해 하나의 백 슬래시()가 argv 배열에 배치되고 큰 따옴표 (")는 다음과 같이 해석됩니다.

  • 홀수의 역 슬래시 뒤에 큰 따옴표가 있으면 역 슬래시 (\) 쌍마다 args 배열에 하나의 백 슬래시()가 배치되고 큰 따옴표는 다음과 같이 해석됩니다. 나머지 백 슬래시에 의한 이스케이프 시퀀스. 리터럴 이중 인용 부호 (")가 argv에 배치됩니다.

이 규칙은 귀하가 보는 결과와 일치하는 것으로 보입니다.다음 명령 행 인수와

static void Main(string[] args) 
{ 
    foreach (string s in args) 
    { 
     Console.WriteLine(s); 
    } 
    Console.ReadLine(); 
} 

:

arg1 "arg2 arg3" arg4\" "arg5\"" arg6\\\" 

출력 :

arg1 
arg2 arg3 
arg4" 
arg5" 
arg6\" 

이유는 당신의 입력 인수

나는이 규칙을 테스트하기 위해 다음과 같은 콘솔 응용 프로그램을 실행 은 이스케이프 처리되지 않은으로 표시됩니다. 큰 따옴표는 시작 문자열 구분 기호로 해석되고 두 번째 큰 따옴표는 앞에 오는 백 슬래시로 이스케이프되며 리터럴 이중 인용 부호로 해석됩니다 (끝 구분 기호가 아님).

+0

고마워요. 어떤 광기가 그 "규칙"의 집합으로 이어 졌는지 궁금하고, 사람들이 주위에 폴더 이름을 어떻게 처리 할 것으로 예상되는지 궁금합니다. –

+1

@AlexMcMillan 누군가가 그들을 쓴 것을 고맙게 생각합니다. – khargoosh

관련 문제