내 응용 프로그램에서 사용자는 파일 이름을 입력 할 수 있습니다. 처리하기 전에 입력 문자열이 Windows Vista에서 유효한 파일 이름인지 확인하고 싶습니다.
그렇게하는 가장 쉬운 방법은 무엇입니까?
유효 함으로 나는 합법적이며 존재하지 않는 것입니다.
답변
확인 여부 filename.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0
및!File.Exists(Path.Combine(someFolder, filename))
답변
다음에 대해 확인하십시오 GetInvalidFileNameChars()
.
var isValid = !string.IsNullOrEmpty(fileName) &&
fileName.IndexOfAny(Path.GetInvalidFileNameChars()) < 0 &&
!File.Exists(Path.Combine(sourceFolder, fileName));
답변
파일을 만들려면 파일 대화 상자를 사용하여 디렉토리 경로를 지정해야합니다. 파일 이름에 대한 잘못된 문자 목록이 있습니다.
파일 이름이 허용되는지 확인하는 유일한 방법은 시도해 보는 것입니다. 권한은 모욕입니다.
답변
나는 이것을 사용한다 :
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;
}