C#/. Net의 경로와 파일 이름을 결합하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1048129

  •  20-08-2019
  •  | 
  •  

문제

경로를 파일 이름과 결합하는 가장 좋은 방법은 무엇입니까?

즉, 주어진 것입니다 c:\foo 그리고 bar.txt, 원해요 c:\foo\bar.txt.

주어진 c:\foo 그리고 ..\bar.txt, 나는 오류를 원한다 c:\foo\bar.txt (그래서 나는 사용할 수 없습니다 Path.Combine() 곧장). 마찬가지로 c:\foo 그리고 bar/baz.txt, 나는 오류를 원한다 c:\foo\baz.txt (아니다 c:\foo\bar\baz.txt).

파일 이름에 ''또는 '/'가 포함되어 있지 않다는 것을 확인할 수 있지만 충분합니까? 그렇지 않다면 올바른 수표는 무엇입니까?

도움이 되었습니까?

해결책

"나쁜"파일 이름을 원한다면 오류를 생성합니다.

if (Path.GetFileName(fileName) != fileName)
{
    throw new Exception("'fileName' is invalid!");
}
string combined = Path.Combine(dir, fileName);

또는 예외를 던지지 않고 "나쁜"파일 이름을 조용히 수정하려는 경우 :

string combined = Path.Combine(dir, Path.GetFileName(fileName));

다른 팁

당신은 사용할 수 있습니다 :

Path.Combine(folder, Path.GetFileName(fileName))

또는 를 건너 뛰려면 (테스트되지 않음, 경로가 자동으로 처리 될 수 있습니다)

Path.Combine(folder, Path.GetFileName(fileName.Replace("/","\\")))

당신이 사용할 때 그것을 말하십시오 Path.Combine(arg1, arg2) - 사용자가 ARG2에 대한 완전히 자격이있는 파일 경로를 입력하면 ARG1을 무시하고 ARG2를 경로로 사용합니다.

내 생각에, Microsoft는 거기에 망쳤다! 이렇게하면 사용자가 전체 파일 시스템을 해킹하면서 넓게 열릴 수 있습니다. 경고를 받으십시오. 작은 프린트를 읽으십시오! 경로를 결합한 경우 사용합니다. var newPath = path1 + @"\" + path2; 더 간단하고 예상치 못한 결과가 없습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top