1. ホーム
  2. c#

[解決済み] ファイルパスにおけるフォワードスラッシュ(/)とバックスラッシュ(♪)の違いについて

2022-04-23 11:58:01

質問

との違いが気になりました。 \/ をファイルパスに含めることができます。私は、時々パスが / と一緒になっていることもあります。 \ .

をどのような場合に使用するのか、どなたか説明していただけると幸いです。 \/ .

解決方法は?

/ は、UnixおよびUnix系システムでのパスセパレータです。最近のWindowsでは、一般的に \/ しかし、マイクロソフトは、ファイルパスには \ をパスセパレータとして数十年間使用してきました。

これは、Windowsより10年以上前の1970年代にさかのぼる歴史的な理由によるものです。当初、MS-DOS(初期のWindowsの基盤)は、ディレクトリをサポートしていませんでした。Unixでは、ディレクトリをサポートするために / という文字が最初からありました。しかし、MS-DOS 2.0でディレクトリが追加されたとき、マイクロソフトとIBMはすでに / という文字を コマンドスイッチ また、DOSの軽量なパーサー(DOSでは QDOS 低スペックのハードウェアで動作するように設計されています。 / という文字を、既存のアプリケーションとの互換性を壊さずに使うことができるのです。

そこで、以下のようなコマンドの引数にファイルパスを渡す際に、"miss a switch" や "invalid switch" といったエラーを回避するために、以下のようにしました。

cd/                        <---- no switch specified
dir folder1/folder2        <---- /folder2 is not a switch for dir

ということになりました。 \ という文字が使われるようになり、このようなコマンドを書くことができるようになりました。

cd\
dir folder1\folder2

をエラーなしで実行します。

その後、マイクロソフトとIBMは、DOSとは無関係のオペレーティングシステムである オーエスツー . OS/2は、おそらくより多くのUnix開発者を引きつけるために、両方のセパレータを使用する機能を備えていた。いつ 1990年、マイクロソフトとIBMが決別 マイクロソフトは、彼らが持っていたコードを使用して、次のコードを作成しました。 ウィンドウズNT このセパレータ不可知論を受け継いで、現代のすべてのWindowsのベースになっています。


DOS→Win16/DOS→Win16/Win32→Win32/WinNTというように、マイクロソフトはOSの大きな変遷の中で後方互換性を重視してきたため、この特殊性が定着し、今後もしばらくはこの傾向が続くと思われます。

そのために、この矛盾が存在するのです。というのも、私が言ったように、WinAPIは一般的にこれらを互換的に使用することができるからです。しかし、サードパーティーのアプリケーションは、もしあなたが / を期待しているのに \ ディレクトリ名の間に Windowsを使用している場合は \ . Unixまたは URI の場合 (これは Unix のパスが基礎になっていますが、全く別の話です)、そのパスには / .


C#の文脈では。 注意すべきは、この 技術的にはC#の質問ですが、(C#が主にWindowsの言語であるとしても)UnixとWindowsの両方で動作する、より"portable" なC#コードを書きたい場合は Path.DirectorySeparatorChar フィールドを使用して、そのシステムで優先的に使用されるセパレータを使用し、さらに Path.Combine() を使用して、適切にパスを追加してください。