84

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

つまり、与えられたc:\foobar.txtが欲しいのですc:\foo\bar.txt

c:\fooandが与えられ..\bar.txtた場合、エラー or が必要ですc:\foo\bar.txt(したがって、Path.Combine()直接使用することはできません)。と についても同様にc:\foobar/baz.txtエラー or c:\foo\baz.txt(not c:\foo\bar\baz.txt) が必要です。

ファイル名に「\」または「/」が含まれていないことを確認できましたが、それで十分でしょうか? そうでない場合、正しいチェックは何ですか?

4

3 に答える 3

19

あなたが使用することができます:

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

または、 \ をスキップするには (テストされていないため、おそらく Path.GetFileName がこれを自動的に処理します)

Path.Combine(folder, Path.GetFileName(fileName.Replace("/","\\")))
于 2009-06-26T09:13:55.413 に答える
3

使用するときは注意してくださいPath.Combine(arg1, arg2)- ユーザーが arg2 の完全修飾ファイル パスを入力すると、arg1 は無視され、arg2 がパスとして使用されます。

私の意見では、Microsoft はそこで失敗しました。これにより、ユーザーがファイルシステム全体をハッキングする可能性があります。注意して、細かい活字を読んでください!パスを組み合わせる場合:var newPath = path1 + @"\" + path2;シンプルで予期しない結果はありません...

于 2015-06-02T19:08:35.573 に答える