パスと/。NET C#でファイル名を結合するための最良の方法は何ですか?
質問
ファイル名とパスを結合する最良の方法は何ですか?
これは、与えられたc:\foo
とbar.txt
は、私が欲しいれるc:\foo\bar.txt
。
を考える..\bar.txt
とPath.Combine()
、私はどちらかエラーか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.GetFileNameはこれを自動的に処理します)\をスキップする
Path.Combine(folder, Path.GetFileName(fileName.Replace("/","\\")))
あなたはPath.Combine(arg1, arg2)
使用する場合があることに注意してください - あなたのユーザーがarg2のための完全修飾ファイル・パスを入力すれば、それはARG1を無視し、パスとしてarg2に使用されます。
私の意見では、マイクロソフトがめちゃくちゃ!これはあなたの全体のファイルシステムをハッキングユーザーとあなたが広く開いたままにすることができます。注意して、細かい活字を読みます!あなたが結合している場合はパスが使用:var newPath = path1 + @"\" + path2;
簡単かつ無予期しない結果...
所属していません StackOverflow