• ベストアンサー

パス区切りの文字について

ちょっと素朴な疑問から質問します。 Windows OS の環境下(限定)でパスの区切り文字として(\)文字と(/)文字の どちらの文字を普段は利用しますか? 多くの場合は両方ともパス区切りとして有効ですが、一部(/)文字では上手く パスを指定できなかった経験があります。そこでパス区切りとしては(\)文字を 普段は使っています。文字列では \\ と重ねるため見づらいこともありますが (/)文字より(\)文字を使った方が安全(必ず指定できる)という考えで使っています。 皆様はパス区切りの文字として(\)文字、(/)文字のどちらを利用しますか? また理由があって使い分けていますか? この2点についてお聞きしたいです。 それでは回答をお待ちしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • noocyte
  • ベストアンサー率58% (171/291)
回答No.4

> 多くの場合は両方ともパス区切りとして有効ですが、一部(/)文字では上手く > パスを指定できなかった経験があります。 Windows API に関しては,'\\' でも '/' でもかまわないようです. (未確認,DOS 時代からそうだったと思います.) しかし Shell API では,'/' だとダメなものもあります. Shell API である SHFileOperation() に '/' 区切りのファイル名を渡して ごみ箱に移動させたところ,移動は成功するのですが,ごみ箱の中身の表示 がおかしくなります.(「元に戻す」ことはできるので,表示だけの問題らしい.) http://www5d.biglobe.ne.jp/~noocyte/Programming/Windows/WindowsTips.html#MoveToRecycleBin ・自作のパス名処理ライブラリ (Windows/UNIX 両用) では,  Windows 用としてコンパイルした場合,パス名の解析を行うときに  '\\' と '/' の両方を認識するようにしています.(DOS 時代から) ・また,'\\' と '/' が混在するパス名 (醜い!) の中の区切り文字を  すべて '\\' または '/' の一方に書き替える関数も用意しています.  (DOS 時代にもそんなパス名を表示してしまうアプリケーションが   たまにありましたが,上記の関数はつい昨年作ったばかり.) ・個人的には,日本語環境では '\\' よりも '/' の方が見やすいので好きです.  ('\\' がバックスラッシュで表示される英語環境ならば,   どちらも見やすさは同じですが.)  なので,自分専用の自作ツールの中には,区切り文字を全部 '/' に  書き替えてパス名を表示しているものもあります.  (他人 (特に UNIX を使ったことがない人) に公開するツールだと   勝手にそうするわけにはいきませんが,オプションでそうできるように   しているものもあります.) ・コマンドプロンプトでパス名を入力する場合は,  '\\' でないとオートコンプリートが効かない.orz ・Windows の CUI コマンドは,'/' をスイッチと見なしてしまう.orz  (そもそも CP/M を真似て作った MS-DOS 1.0 のこの仕様がすべての元凶!) ・とはいえ,'/' を使うのは,あくまでも表示やその場限りの入力の時だけ.  自作の関数やアプリ以外に渡すパス名は,確実を期して '\\' にする.  ただし Windows/UNIX で共通の #include では '/'.(例:#include <sys/types.h>)

Oh-Orange
質問者

お礼

貴重な情報をありがとうございます。 回答を読みながら思い当たる点やいろいろと参考になりました。 >・Windows の CUI コマンドは,'/' をスイッチと見なしてしまう.orz > (そもそも CP/M を真似て作った MS-DOS 1.0 のこの仕様がすべての元凶!) (/)のスイッチ文字問題は MS-DOS プロンプト以外に Windows の CUI もスイッチと 見なすとは気づきませんでした。正確には調べようとは思わなかったです。 >Windows API に関しては,'\\' でも '/' でもかまわないようです. >しかし Shell API では,'/' だとダメなものもあります. この2つの情報がかなり参考になりました。 一部(/)文字では上手くいかなかった経験はありましたが、どんな処理かを 忘れてしまっていました。今、思うと Shell の API 関数なのかとも思います。 いろいろと参考になりました。 ありがとうございました。

その他の回答 (3)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

>理由にある『安全確実』とはどのような事でしょうか? >Unix 系に移植するときも考えて / 文字が安全確実という事でしょうか? >もし、お時間がありましたら再回答をお待ちしています。 gccを使う場合、クロスコンパイルする場合も含めて"/"で書いておいて問題を起こしたことが無いので安全確実としました。

Oh-Orange
質問者

お礼

再回答ありがとうございます。 >gccを使う場合、クロスコンパイルする場合も含めて"/"で書いておいて >問題を起こしたことが無いので安全確実としました。 そういう理由でしたか。 ありがとうございました。

  • RAPT
  • ベストアンサー率20% (1/5)
回答No.2

ソースコードの文字リテラルとしては、バックスラッシュ(\)を使用しています。 #include ディレクティブでは、スラッシュ(/)を使用しています。 理由としては慣習的であることが一番大きいですね。

Oh-Orange
質問者

お礼

アドバイスをありがとうございます。 >理由としては慣習的であることが一番大きいですね。 なるほど。そう言われると MS-DOS 時代の習慣で(\)文字を使っていたりしますね。 昔、MS-DOS 時代でスイッチ文字を変更するとコマンドプロンプトで(/)文字も区切り文字 として認識できました。しかし、変更しないと(/)文字が区切り文字として使えないため ディレクトリの区切り文字としては(\)文字を使うのが習慣になりました。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

VisualStudioを使う場合は基本的に"¥"です。 gccを使う場合、"/"で書いてます。 理由は移植性と、いちばん安全確実だと思って使っています。

Oh-Orange
質問者

お礼

回答をありがとうございます。 >gccを使う場合、"/"で書いてます。 >理由は移植性と、いちばん安全確実だと思って使っています。 理由にある『安全確実』とはどのような事でしょうか? Unix 系に移植するときも考えて / 文字が安全確実という事でしょうか? もし、お時間がありましたら再回答をお待ちしています。

関連するQ&A