• ベストアンサー

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

ちょっと素朴な疑問から質問します。 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

  • パス区切りに使用する文字について

    前から疑問だったのですが、パスの区切りは、 \ あるいは / って両方使えますよね? これはなぜ両方使えるのでしょうか? なにか理由でもあるのでしょうか?

  • パス区切り文字(¥と/)

    書いたPHPスクリプトを、 ローカルではWindows版XAMPP上で動作確認し、 リモートでは実際にLinux系サーバーで動かしています。 ローカルで書いたコードを、(当たり前ですが、)手を加えずに、 そのままの形で、リモートでも使えたらいいなと、いつも思っているわけですが、 サーバーOSが、WinとLinuxと、異なるため、 パス周りのコーディングで、しばしば、つまずいてしまいます。 例えば、 echo dirname(__FILE__) ; では、 パス区切り文字として、 リモート: / (スラッシュ) ローカル: ¥ (バックスラッシュ) といった違いが生じたりします。 ローカルのWindows環境でも、パス区切り文字として「/」を使えるので、 手打ちの部分においては、どちらのOSでも使える「/」(スラッシュ)で対応していますが、 先ほどのdirname(__FILE__) の例のような場合には、本当に困ってしまいます。 (文字列置換関数や正規表現なんかで、いちいち変換すべきなのでしょうか?) 何か、上手い知恵などありましたら、どなたか教えてください。

    • ベストアンサー
    • PHP
  • テキストファイルのデータ区切り文字(制御文字)について

    テキストファイルにデータを保存しているのですが、区切り文字タブ\tはフィールドの区切りに使っています。 その状態で、仮に1つのフィールドにデータを詰め込む場合、,(カンマ)で区切った場合にデータ自体に金額の,があった場合、誤動作します。フィールドの区切りはタブ\tは普通ですが、1つのフィールドに複数データを持たせる場合の区切り文字は\0など使っても問題ないのでしょうか? 環境はWindows, Linux両方で使います。\0を使ってそれが文字列の最後とまた誤動作しても嫌です。 皆さんは\t以外にテキストデータの区切りにどのような制御文字を使っていますか?ちなみに改行は1レコードの区切り文字です。

    • ベストアンサー
    • Perl
  • ASP.NET で Querystring の区切り文字を / などに変更する方法

    URL の Querystring は、通常 http://***.com/index.aspx?id=abc&key=def のように、区切り文字として & と = を使いますが、これを下のように / と _ などに変更する方法はあるでしょうか? http://***.com/index.aspx/id_abc/key_def ServerVariables("PATH_INFO") で取得した文字列を文字列操作して変数格納するような方法ではなく、machine.config などで、この区切り文字の定義を変更する方法があるというのをどこかで見たような気がするのですが、探しきれませんでした。 教えてください。お願いします。

  • Word セクション区切りの自動削除

    セクション区切りは選択してDeleteすれば消えますが、数が多いのでCtrlなども使わず、自動で一気に消えるようにしたいのです。 通常の文字であれば、置換で一気に消すこともできますが、セクション区切りや改ページは「置換する文字列」に指定する方法もわかりません。 自動であれば方法は問いませんので、よろしくお願いいたします。

  • Excelの区切り位置がうまくいかない

    Excelで、ひとつの列のデータを分割するため「区切り位置」を利用したいのですが、うまく分割することができません。   会社名 部署名 役職 上記のようにデータが入力されていて、区切り文字はスペース、セミコロン、カンマといろいろ試したのですが、分割すると二つめ以降のデータが消えてしまいます。 初めに、区切り位置指定ウィザード1/3のプレビューでは、元のデータがそのまま表示されています。 ウィザードの2/3に進むと、該当の区切り文字にチェックを入れていても、プレビューに「会社名」のみしか表示されておらず、それで完了すると、「会社名」のみのデータに置き換わってしまいます。 データが長すぎるのかと簡単なデータを入力してみたところ、うまくできました。 また、入っているデータと同じ内容を手入力して試したところ、そちらもうまくできましたので、データの長さではないようです。 元のデータの形式が何かおかしいのかと、新しいブックに該当の列だけを値で貼り付けたり、セルの書式設定で表示形式を変更してみたりしましたが、やはりうまくできません。 データの数が多いので、全てのデータを手入力で入れ直すわけにはいかず、困っています。 教えていただけたら助かります。 どうぞよろしくお願いいたします。

  • 文字列取得

    '/path1/path2/file1.txt' '/path1/path2/path3/file2.txt' 上記のようなpathがあった場合にファイル名(拡張子なし)の 文字列を取得したいのですがどのように良いでしょうか? 宜しくお願い致します。 awkで$4と指定すれば「file1.txt」の文字列を取得できるのですが パスの長さが定まっていないため$4ではなく最後の文字と指定する 記号はないでしょうか? echo /path1/path2/file1.txt |awk '{FS="/"; print $4}'

  • カンマ区切りの数字で指定したものだけを取り出したいです。

    カンマ区切りの数字で指定したものだけを取り出したいです。 $test = "1,2,3,5,10,11,14" という文字列から、1だけを取り出したい場合、どうしたらよいのでしょうか。 preg_match_all("/(?<!1)1(?!1)/",$test,$match); print implode($match[0]); としてますが、なぜか10,11,14と1が含まれるもの全てが表示されてしまいます。

    • ベストアンサー
    • PHP
  • 絶対パスを相対パスに

    VC++2005 Express Editionです。 ドラッグアンドドロップで受け取った(DragQueryFile)絶対パスファイル名を相対パスに変換したいのですが、良いコードサンプルなどありましたら教えてください。できればUnicodeとマルチバイトの両方に対応させたいです。 GetCurrentDirectoryでカレントディレクトリを取得してみたのですが、この場合ドライブ名が大文字なのに対し、ドラッグアンドドロップで受け取ったドライブは小文字なので、簡単にはできそうにありませんでした。 文字列処理は今まで標準関数しか使ったことがありませんが、これを機会にコードなど勉強したいと思っています。 よろしくお願いします。

  • 「VBA] フルパス名で区切り記号を変更する

    VBAでフルパス名を指定したいのですが  D2にフルパス相当の文字列が入っています。  例えば、    C:*Users*xxxx*Downloads*Video*LiveConcert.mp3 これを下記のように(¥を/に変更したい)    C:/Users/xxxx/Downloads/Video/LiveConcert.mp3 注意 : 投稿すると半角の円マーク(¥)がスラッシュ(/)に変わってしまうので  *で代用しています。 *は円マーク(¥)と読み替えてください。 現在は、下記コードですが  どのように変更したら良いでしょうか ?   WsCJMP3.Range("A2") = "FILE " & """" & WsList.Range("D2") & """" & " MP3" ---------------------