2012-08-07 2 views
1

.NET 응용 프로그램의 일부는 입력 문자열 (URI를 나타냄)을 가져와 파일 이름 (및 해당되는 경우 확장명) 만 반환해야합니다.Path.GetFileName 버그?

이제 Path.GetFileName는 다음을 제외하고, 대부분의 경로에 대한이 완벽하게 정상적으로 수행 : 입력 문자열이 만 도메인 이름으로 구성 HTTP 경로 (예 : example.com)과 포트 번호 (예 : 10210), GetFileName 반환하는 경우 포트 번호.

간단한 영어로 : 입력 문자열은 인터넷 라디오 스트림에 연결되는 URI 인 http://example.com:10210입니다. 해당 값으로 Path.GetFileName이 호출되면 반환 값은 10210입니다.

이것은 의도 한 동작입니까? 콜론으로 경로 세그먼트를 구분하는 플랫폼을 생각해 낼 수 없습니다. 반환 값은 String.Empty이 아니어야합니까?

편집

Uri.LocalPathSystem.Web.VirtualPathUtility.GetFileName 사이 매시업 것 깨끗한 솔루션 것 같아,하지만 전체 프레임 워크 클라이언트 프로파일에서 다시 표적으로 프로젝트를 의미한다.

마지막 슬래시 기호 앞에 모든 것을 제거한다고 생각합니다. 어쨌든 필자의 시나리오에서는 구분 기호가 변경되지 않습니다. 그렇게하면 반환 값으로 example.com:10210이 나와 어떤 일을하는지 이해할 수 있습니다.

답변

2

docs on the Path class에서 보면 http 또는 ftp 또는 이와 유사한 것으로 사용하려는 의도는 실제로 나타나지 않습니다. 모든 예제는 로컬 파일 경로와 네트워크 공유 경로를 중심으로합니다.

웹의 다른 일화 정보 인 such as this article about Path.Combine을 기반으로하면 HTTP 용 경로를 사용하지 않아야한다고 생각하게되었습니다.

+0

오 ... 글쎄 그건 부끄러운 일입니다. 그것은 실제로 내가 설명했던 것들을 제외하고 당신이 던질 수있는 거의 모든 종류의 URI를 위해 작동합니다. –

0

나는 이것에 관해서 확신 할 수 없다. 이것은 내 추측입니다.

Path 클래스는 기본 파일 시스템이있는 경로에 사용됩니다. (HTTP 요청은 파일 시스템을 가리 키지 않을 수도 있습니다. 단순히 동적으로 생성 된 리소스 일 수도 있습니다.) Uri 클래스를 URI 구문 분석에 사용해야합니다.

0

(콜론)은 Path.GetInvalidPathChars을 호출하는 결과의 일부가 아니며, 이는 Path.GetFileName이 입력의 유효성을 검사하는 데 사용됩니다. 불행히도 이것은 예상 된 행동 인 것처럼 보입니다.