code

임의의 문자열이 유효한 파일 이름인지 확인하는 가장 쉬운 방법

codestyles 2020. 11. 7. 09:59
반응형

임의의 문자열이 유효한 파일 이름인지 확인하는 가장 쉬운 방법


내 응용 프로그램에서 사용자는 파일 이름을 입력 할 수 있습니다. 처리하기 전에 입력 문자열이 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;
}

참고 URL : https://stackoverflow.com/questions/4650462/easiest-way-to-check-if-an-arbitrary-string-is-a-valid-filename

반응형