Windowsはバックスラッシュ\
はファイルパスにありますが、.NETのURIクラスはスラッシュ/
。最も原始的なシステムでも受け入れられている正しい方法はありますか?そして、他のWindowsと比較して、.NETのURIが他のスラッシュを表示するのはなぜですか?
ファイルパスとURIは異なります。 \
はWindowsファイルパスで正しく、/
はURIで正しい。
したがって、このファイルパス:C:\Documents\Foo
は次のURIに変換されます:file:///C:/Documents/Foo
この点では、Windowsはオペレーティングシステムの卑劣な子ですが、多くのAPIもスラッシュを受け入れます。 Windowsでは、ファイルパスは次のようになります。
C:\Users\jsmith\Documents\file.txt
Unixライクなシステム(Mac OS XおよびLinuxを含む)では、同じパスは次のようになります。
/home/jsmith/Documents/file.txt
RFC 1738 、alwaysで標準化されたURLは、プラットフォームに関係なくスラッシュを使用します。
http://home.example.com/Documents/file.txt
この理由は歴史的なものです。 Windowsでさえ、URLに関する考え方を覆すことはできません。バックスラッシュについて話しているとき、それらを使用する唯一のプラットフォームはWindows(およびその他の斬新なもの)です。
Windows以外で使用されるバックスラッシュが表示されるのはUNCパスですが、Windowsもこれらの主要な提案者です。
\\HOMESVR\Documents\file.txt
そして、あなたが何をするにしても、あなたのウェブサイトのコマーシャルを作らないで、「私の会社のドットコムバックスラッシュプロモーション」と言ってください。
この理由は、歴史の小さな部分です。 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
を使用して現在のパス区切り文字を取得する必要があります。
ファイルシステムのパス区切り文字に関する限り、Windowsではall APIはスラッシュを受け入れます(ただし、そうでないバグのあるものがあるかもしれません)-問題はほとんどのアプリケーションがそうしないことですそれらを受け入れる(または正しく解析しない)。
実際、正しく思い出せば、サブディレクトリ(v2.0)のサポートを開始して以来、MS-DOSでもAPIレベルでパス区切り文字として '/'を受け入れていましたが、その時点で '/'文字はすでに確立されていましたコマンドラインオプションの「スイッチ」文字。したがって、バックスラッシュはDOS(およびそれ以降のWindows)での事実上のパス区切り文字になりました。
URIは似ていますが、ファイルパスとは異なる動物であり、URIは常に「/」を使用してコンポーネントを分離する必要があります。 WindowsアプリケーションとAPIは、おそらくURIの区切り文字として '\'を受け入れます。これは、おそらくそれらのシステムで円記号を区切り文字として使用することに慣れており、URIを使用してローカルファイルを表現できるためです。
今日の役に立たないトリビア-MS-DOSの初期のバージョンでは、コマンドラインオプションスイッチ文字(一般に「/」から「-」に)を変更するAPIがあったため、コマンドはよりUnix風になり、コマンドはコマンドラインでパス区切り文字として「/」を受け入れます。 APIはあまり成功していませんでした(アプリケーションで普遍的にサポートされていなかったためだと思います)。それ以降のバージョンでは削除されました。
うーん...二度目の読書で、この答えはほとんど役に立たない雑学です。
Windowsはバックスラッシュ(\
)ファイルシステムの区切り文字。それ以外の場合は、スラッシュ(/
)。 Uri
タイプでは、 均一リソース識別子 が定義されているため、スラッシュを使用します。
Webは、パス内のディレクトリをスラッシュ(/)で区切るUNIXの方法に基づいています。 Windowsはディレクトリをバックスラッシュ(\)で区切ります
正しい方法は、その用途に依存します。 Windowsマシン上のローカルファイルへのパスには、バックスラッシュを使用します。 UNIXベースのマシン(Mac、Linuxを含む)にあるWebリソースまたはファイルへのパスには、スラッシュを使用します。
.NETのURIがスラッシュを使用する理由は、Webブラウザーで使用するための書式設定だからです。
サーバーは、Webリソースをハードドライブ上のファイルにリンクするために必要なすべての作業を行います。
Windowsはパスに両方を受け入れます。
Windowsエクスプローラーを開いてC:/Temp/Foo
、c:\Temp\Foo
が正しく開きます。
\常にエスケープすることに注意する必要があるため、バックスラッシュは危険です。多くのプログラミング言語には、エスケープにバックスラッシュを使用する同等のprintfがあります。
/フロントスラッシュはほとんど無害です。
:コロンはAppleによって使用されていました(そして現在でもある程度使用されています)。