내 응용 프로그램에서 사용자는 파일 이름을 입력 할 수 있습니다. 처리하기 전에 입력 문자열이 Windows Vista에서 유효한 파일 이름인지 확인하고 싶습니다.
그렇게하는 가장 쉬운 방법은 무엇입니까?
유효 함으로 나는 합법적이며 존재하지 않는 것입니다.
내 응용 프로그램에서 사용자는 파일 이름을 입력 할 수 있습니다. 처리하기 전에 입력 문자열이 Windows Vista에서 유효한 파일 이름인지 확인하고 싶습니다.
그렇게하는 가장 쉬운 방법은 무엇입니까?
유효 함으로 나는 합법적이며 존재하지 않는 것입니다.
답변:
확인 여부 filename.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0
및!File.Exists(Path.Combine(someFolder, filename))
"http://www.microsoft.com/"
테스트를 통과하지만에 대한 올바른 파일 이름, 저두하지 않습니다"::::"
< 0
대신 >= 0
으로 IndexOfAny()
돌아 -1 아무것도 발견되지 않을 경우
다음에 대해 확인하십시오 GetInvalidFileNameChars()
.
var isValid = !string.IsNullOrEmpty(fileName) &&
fileName.IndexOfAny(Path.GetInvalidFileNameChars()) < 0 &&
!File.Exists(Path.Combine(sourceFolder, fileName));
"http://www.microsoft.com/"
테스트를 통과하지만에 대한 올바른 파일 이름, 저두하지 않습니다"::::"
::::
타당하다고 잘못 간주 된 귀하의 말이 맞습니다 . < 0
대신 표시하도록 답변을 수정했습니다 == 0
.
GetInvalidFileNameChars
아닌을 사용 하고 있는 것으로 나타났습니다 GetInvalidPathChars
. 경로가있는 파일 이름이 아닌 파일 이름 만 테스트하는 한 괜찮습니다.
GetInvalidFileNameChars
:-)
파일을 만들려면 파일 대화 상자를 사용하여 디렉토리 경로를 지정해야합니다. 파일 이름에 대한 잘못된 문자 목록이 있습니다.
파일 이름이 허용되는지 확인하는 유일한 방법은 시도해 보는 것입니다. 권한은 모욕입니다.
나는 이것을 사용한다 :
public static bool IsValidFileName(string name) {
if(string.IsNullOrWhiteSpace(name)) return false;
if(name.Length > 1 && name[1] == ':') {
if(name.Length < 4 || name.ToLower()[0] < 'a' || name.ToLower()[0] > 'z' || name[2] != '\\') return false;
name = name.Substring(3);
}
if(name.StartsWith("\\\\")) name = name.Substring(1);
if(name.EndsWith("\\") || !name.Trim().Equals(name) || name.Contains("\\\\") ||
name.IndexOfAny(Path.GetInvalidFileNameChars().Where(x=>x!='\\').ToArray()) >= 0) return false;
return true;
}
예약 된 이름, 권한 및 길이 제한을 제외한 모든 것을 처리해야합니다. 이것은 상대 및 절대 파일 이름을 모두 허용합니다.
이것은 단지 아이디어입니다. 예외 목록을 채워야합니다.
public static bool IsValidFilename(string filename)
{
try
{
File.OpenRead(filename).Close();
}
catch (ArgumentException) { return false; }
catch (Exception) { }
return true;
}