パスとファイル名を組み合わせる最良の方法は何ですか?
つまり、_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.GetFileNameがこれを自動的に処理します)
Path.Combine(folder, Path.GetFileName(fileName.Replace("/","\\")))
Path.Combine(arg1, arg2)
を使用する場合、ユーザーがarg2の完全修飾ファイルパスを入力した場合、arg1は無視され、arg2をパスとして使用することに注意してください。
私の意見では、Microsoftはそこに台無しにした!これにより、ユーザーがファイルシステム全体をハッキングする可能性が高くなります。注意してください、細かい活字を読んでください!パスを組み合わせる場合は、var newPath = path1 + @"\" + path2;
よりシンプルで予期しない結果はありません...