パスと/。NET C#でファイル名を結合するための最良の方法は何ですか?

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

  •  20-08-2019
  •  | 
  •  

質問

ファイル名とパスを結合する最良の方法は何ですか?

これは、与えられたc:\foobar.txtは、私が欲しいれるc:\foo\bar.txt

を考える..\bar.txtPath.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;簡単かつ無予期しない結果...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top