C#/. Net의 경로와 파일 이름을 결합하는 가장 좋은 방법은 무엇입니까?
문제
경로를 파일 이름과 결합하는 가장 좋은 방법은 무엇입니까?
즉, 주어진 것입니다 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;
더 간단하고 예상치 못한 결과가 없습니다 ...