web-dev-qa-db-ja.com

それで、WindowsでISパスのスラッシュ(/または\)の正しい方向は何ですか?

Windowsはバックスラッシュ\はファイルパスにありますが、.NETのURIクラスはスラッシュ/。最も原始的なシステムでも受け入れられている正しい方法はありますか?そして、他のWindowsと比較して、.NETのURIが他のスラッシュを表示するのはなぜですか?

53
Letterman

ファイルパスとURIは異なります。 \はWindowsファイルパスで正しく、/はURIで正しい。

したがって、このファイルパス:C:\Documents\Fooは次のURIに変換されます:file:///C:/Documents/Foo

52
Ben James

この点では、Windowsはオペレーティングシステムの卑劣な子ですが、多くのAPIもスラッシュを受け入れます。 Windowsでは、ファイルパスは次のようになります。

C:\Users\jsmith\Documents\file.txt

Unixライクなシステム(Mac OS XおよびLinuxを含む)では、同じパスは次のようになります。

/home/jsmith/Documents/file.txt

RFC 1738alwaysで標準化されたURLは、プラットフォームに関係なくスラッシュを使用します。

http://home.example.com/Documents/file.txt

この理由は歴史的なものです。 Windowsでさえ、URLに関する考え方を覆すことはできません。バックスラッシュについて話しているとき、それらを使用する唯一のプラットフォームはWindows(およびその他の斬新なもの)です。

Windows以外で使用されるバックスラッシュが表示されるのはUNCパスですが、Windowsもこれらの主要な提案者です。

\\HOMESVR\Documents\file.txt

そして、あなたが何をするにしても、あなたのウェブサイトのコマーシャルを作らないで、「私の会社のドットコムバックスラッシュプロモーション」と言ってください。

65
Jed Smith

この理由は、歴史の小さな部分です。 UNIXが作成されたとき、またはむしろUNICSと言うべき場合、ディレクトリの区切り文字として/を選択しました。昔は、ストレージメディアはかなり小さく、ルート内のすべてのディレクトリは別のマウントされたストレージデバイス(/ bin/libなど)でした。

MicrosoftがMS-DOSバージョン1.0をリリースしたとき、ディレクトリをサポートしていませんでした。プログラムからのパラメーターに/文字を使用しました(プログラム/ a/b)

Q-DOSのクイックブランドであるMS-DOS 1.0は、ドライブ文字(A:C:など)を継承したCP/M派生オペレーティングシステムです。

後のバージョンでは、いくつかのディレクトリサポートを追加したかったため、オペレーティングシステムでは/が別の意味をすでに持っていたため、\の使用を選択しました。

現代のオペレーティングシステムには、コンピューターの歴史に関する多くの成果物がありますが、ほとんどの人は気づいていないと思いますが、それでもその動作に大きな影響を与えていると思います。

だから、正しい方法は何ですか?ある場合は、MicrosoftがDOSにディレクトリサポートを実装する前にUNIXライクなオペレーティングシステムが存在していたため、それが/だと言います。

補足説明として、.NETについては、System.IO.Path.DirectorySeparatorCharを使用して現在のパス区切り文字を取得する必要があります。

13
Rubens Farias

ファイルシステムのパス区切り文字に関する限り、Windowsではall APIはスラッシュを受け入れます(ただし、そうでないバグのあるものがあるかもしれません)-問題はほとんどのアプリケーションがそうしないことですそれらを受け入れる(または正しく解析しない)。

実際、正しく思い出せば、サブディレクトリ(v2.0)のサポートを開始して以来、MS-DOSでもAPIレベルでパス区切り文字として '/'を受け入れていましたが、その時点で '/'文字はすでに確立されていましたコマンドラインオプションの「スイッチ」文字。したがって、バックスラッシュはDOS(およびそれ以降のWindows)での事実上のパス区切り文字になりました。

URIは似ていますが、ファイルパスとは異なる動物であり、URIは常に「/」を使用してコンポーネントを分離する必要があります。 WindowsアプリケーションとAPIは、おそらくURIの区切り文字として '\'を受け入れます。これは、おそらくそれらのシステムで円記号を区切り文字として使用することに慣れており、URIを使用してローカルファイルを表現できるためです。


今日の役に立たないトリビア-MS-DOSの初期のバージョンでは、コマンドラインオプションスイッチ文字(一般に「/」から「-」に)を変更するAPIがあったため、コマンドはよりUnix風になり、コマンドはコマンドラインでパス区切り文字として「/」を受け入れます。 APIはあまり成功していませんでした(アプリケーションで普遍的にサポートされていなかったためだと思います)。それ以降のバージョンでは削除されました。

うーん...二度目の読書で、この答えはほとんど役に立たない雑学です。

10
Michael Burr

Windowsはバックスラッシュ(\)ファイルシステムの区切り文字。それ以外の場合は、スラッシュ(/)。 Uriタイプでは、 均一リソース識別子 が定義されているため、スラッシュを使用します。

3
Andrew Hare

Webは、パス内のディレクトリをスラッシュ(/)で区切るUNIXの方法に基づいています。 Windowsはディレクトリをバックスラッシュ(\)で区切ります

正しい方法は、その用途に依存します。 Windowsマシン上のローカルファイルへのパスには、バックスラッシュを使用します。 UNIXベースのマシン(Mac、Linuxを含む)にあるWebリソースまたはファイルへのパスには、スラッシュを使用します。

.NETのURIがスラッシュを使用する理由は、Webブラウザーで使用するための書式設定だからです。

サーバーは、Webリソースをハードドライブ上のファイルにリンクするために必要なすべての作業を行います。

3
EmFi

Windowsはパスに両方を受け入れます。

Windowsエクスプローラーを開いてC:/Temp/Fooc:\Temp\Fooが正しく開きます。

1
LaBracca

\常にエスケープすることに注意する必要があるため、バックスラッシュは危険です。多くのプログラミング言語には、エスケープにバックスラッシュを使用する同等のprintfがあります。

/フロントスラッシュはほとんど無害です。

:コロンはAppleによって使用されていました(そして現在でもある程度使用されています)。

0
neoneye