2008-09-19 6 views
19

유효한 Windows 파일 이름인지 확인하기 위해 텍스트 문자열의 유효성을 검사 할 수있는 좋은 정규식은 무엇입니까? (일명 \/:*?"<>| 문자가 아님).파일 이름 유효성 검사를위한 C#의 정규식

나는 다음처럼 사용하고 싶습니다 :

// Return true if string is invalid. 
if (Regex.IsMatch(szFileName, "<your regex string>")) 
{ 
    // Tell user to reformat their filename. 
} 

답변

48

으로는 GetInvalidFileNameChars이 당신을 위해 무엇을해야, 이미 대답, 당신은 심지어 정규 표현식의 오버 헤드를 필요가 없습니다

if (proposedFilename.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1) 
{ 
    MessageBox.Show("The filename is invalid"); 
    return; 
} 
+0

if 문에 간단한 오른쪽 괄호 배치 실수가 있지만 감사합니다! – Balk

+7

"C ::::::::"는 유효한 파일 이름입니까? – Andrew

+0

Andrew : 아니요, 이것은 문자에 대한 근본적인 기본 검사입니다.'proposedFilename'을 사용하여 파일에 액세스하는 데는 여러 가지 이유가 있습니다. 파일 (존재하지 않음), 읽기 전용, 경로가 너무 길거나 디렉토리가 없습니다. 존재하지 않는다. 이름은 도스 장치 파일 (예 : 'nul'또는 'prn')이다. –

0

당신이 유용한 방법의 집합을 가지고있는의 DirectoryInfo 클래스와 함께의 System.IO.FileInfo 클래스를 사용하지 않는 이유는.

6

이 그냥 파일 이름에 포함되어 있는지 여부를 확인하는 것만 큼 간단하지 않습니다를 System.IO.Path.GetInvalidFileNameChars (다른 몇 가지 답변에서 이미 언급했듯이).

예를 들어, 누군가가 유효하지 않은 문자를 포함하지 않지만 300 자 길이의 이름을 입력하면 (즉, MAX_PATH보다 큼) 이는 .NET 파일 API에서 작동하지 않으며 나머지 창은 \? \ path 구문을 사용합니다. 파일 이름의 길이를 결정하는 데 경로의 나머지 부분에 대한 컨텍스트가 필요합니다. more information about this type of thing here을 찾을 수 있습니다.

궁극적으로 모든 검사는 입니다. 파일 이름이 유효하지 않다는 것을 증명하거나 유효한지 여부에 대한 합리적인 예측을 제공 할 수 있습니다. 실제로 파일 이름을 사용하지 않고 파일 이름이 유효 함을 증명하는 것은 사실상 불가능합니다. (그리고 심지어는 이미 존재하는 경우 같은 문제가 있습니까? 유효한 파일 이름 일 수도 있지만 시나리오에서 중복 된 이름이 유효합니까?)

0

Path.GetInvalidFileNameChars - 좋지 않습니다. 이것을 시도하십시오 :

if(@"C:\A.txt".IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1) 
{ 
    MessageBox.Show("The filename is invalid"); 
    return; 
} 
+0

당신이 원하는 것을 따라 달라진다. 나는 여기에 구글 쿼리에서 왔고 유효한 파일 이름 (전체 경로가 아님) 만 확인하려고하고 폴더 안에 "c : \ a.txt"라는 파일을 가질 수 없다고 확신한다.) –

+0

예, Path.GetInvalidFileNameChars() 허용되는 파일 이름 만 확인하지만 명명 규칙 (http://msdn.microsoft.com/en-us/library/aa365247.aspx#naming_conventions)에는 많은 흥미로운 규칙이 있습니다. –

관련 문제