2009-07-31 11 views
4

私の頭にはしばらくの間疑問が残っています。 Path.DirectorySeperatorCharの重要性は何ですか? 私はただ代わりに '\'を置くことはできません - あなたがアプリケーションで膨大な数のパスを構築している場合は特に、プロパティを呼び出すよりも速いと思います。 ? 理由はありますか? '\'以外のフォルダ/ファイルパスの分離のために別のCharが存在する可能性がありますか?多分別のオペレーティングシステムで?Path.DirectorySeperatorCharを使用する必要があります。C#

答えて

15

はい、このプロパティを使用してください。それはより将来的なものになるだろう。 Mono(Linux)と互換性がありますが、MS.NETは他のプラットフォーム(CompactやMicro Frameworkなど)にも移行する可能性があります。

しかし、最も良い方法は、Path.Combine()Path.GetFileName()などを使用することです。その後、セパレータcharはまったく必要ありません。

+0

互換性に関する問題はたくさんあります。それを知らなかった – LolaRun

1

Linuxでは、区切り記号は/です。私たちはそこにモノを持っています。

3

パスを結合するためにPath.Combine()を使用してください。残念ながら、Pathクラスのメソッドは特別な構造体(Pathはおそらく?ではなく)の代わりにstringで動作するので、できるだけ速くはありません。これはなぜあなたが求める問題ですか?この宝石:

例外:
ArgumentExceptionパス1またはパス2GetInvalidPathCharsで定義された無効な文字の一つ以上を含んでいます。

+0

いいえ!問題はありません、私はパフォーマンスの最適化を求めています。 しかしあなたは言った、「それはできるほど速くはありません。問題は、パスの通常の文字列連結よりも理論的に速いかどうかです。 つまり、どちらが速いのですか? Path.Combine()またはdirectory1 + Path.DirectorySeperatorChar + dir2。 – LolaRun

+0

'path.Combine()'は 'directory1'の終わりおよび/または' directory2'の始まりに存在するセパレータを複製しません。つまり、GUIスレッドで何千回も操作を実行する必要がある場合、オプションの手動実装は大幅に/測定可能に高速になります。おそらく、バックグラウンドのプロセスやツールでは問題になることはないでしょうし、確かに「数が少ない」操作(数百以下)ではないでしょう。 –

1

Windowsは/をパス区切りに使用できますか?互換性を持たせるためにそれを使用してください。ただし、combineメソッドを使用する方が適しています。

0

コードを、パス区切りにスラッシュを使用するUnixなどの他のプラットフォームと互換にする。私は、デバイスドライバのパスなど、Windows自体に特別なコーナーケースがいくつかあると考えています。

Windowsの一般的には、パス区切り文字にスラッシュを使用できますが、すべてのWindowsアプリケーションで使用できるわけではありません。たとえば、コマンドラインでスラッシュは通常、パラメータを導入します。だから私は個人的にこれに頼っていません。

しかし、状況によっては頻繁に使用したいことについては非常に冗長であることに同意します。私自身の(Delphi)コードでは、必要に応じて適切な種類のスラッシュを追加するメソッド "AddSlash"を使用しました。プラットフォームの正しい文字にデコードされた新しい言語シンボルまたは文字定数を想像することができます。

関連する問題