c++でファイル操作について学習しています。
結論から申しますとファイルやディレクトリ操作のときの「/」と「\」の違いは何でしょうか?
以下の写真のような環境だったとします。
全て四角で分かりにくいと思いますが。text1は通常のテキストファイルです。
main.cppでtext1の内容を読み込もうとしました。
ifstream fin(".\text_folder\text1") とやるとエラーとなり
ifstream fin("./text_folder/text1") とやるとエラーになりませんでした。
例えばコマンドを打つときにも
cd A\text_folder
cd A/text_foldfer
で行けるのに今回のファイル操作ではなぜエラーが起きたのでしょうか?
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
C だと \t は「水平タブ文字」を表すから
".\text_folder\text1"
という文字列リテラルは
.「水平タブ」ext_folder「水平タブ」ext1
と解釈される. つまり, そういう名前のファイルがあればよかったわけだし, 今回のエラーはそういう名前のファイルを作らなかったあなたの落ち度 (え?) なわけだ.
以下小ネタ.
Windows/DOS の「内部のパス解析ルーチン」では「/」と「\」を同等に扱っている. ただし「/」をコマンドプロンプト (command.com) のオプション指定に使っていたため, コマンドプロンプトで「/」をパスの区切りに使おうとすると「オプション」と解釈されて問題を生じることがある (逆にいえば, そこを潜り抜ければ「/」と「\」は全く同等に使える). そしてこの「コマンドプロンプトにおけるオプション指定文字」を変えるシステムコールもあったのだが MS-DOS 3.30 あたりで消された. これには「Microsoft の陰謀説」もあるぞ.
No.2
- 回答日時:
> 結論から申しますとファイルやディレクトリ操作のときの「/」と「\」の違いは何でしょうか?
ぶっちゃけ、「OSの違い」です。
元々、Cが生まれたUNIX上だと、ファイル・ディレクトリのパス上の区切り文字は/です。そういう風に設計されています。
一方、WindowsはDOSの時からの伝統でファイル・ディレクトリのパス上の区切り文字は\になっています。
と言うわけで、「UNIXで生まれたC言語をWindowsで使う際にWindowsのディレクトリをどないして表現すんねん」って話が出てきたわけですよね。何故なら、C言語は設計上、UNIXと親和性があるように設計されていて、\はエスケープ文字を表現する為に使われてる。
例えば、WindowsでC系の言語でProgram Files (x86)とか言うフォルダを参照する時どうすんだ、とか(笑)。これ、多分誰もが一回はハマる話ですよねぇ。UNIXだとそもそもデフォルトでは、フォルダ名にスペースを含む事はありませんが、Windowsだとそれがある。ふっつーにC言語で作ったプログラムから端末にProgram Files (x86)にある何かにアクセスしろ、って場合、困っちゃうんですよね。
一つはパス名を完全に文字列にすれば、賢いDOS窓が「パス名だね!」って判断してくれるテクニック。
もう一つが
C:\\Program\ Files\ (x86)\\hoge.exe
とエスケープ文字\を駆使して記述する方法ですね。昔Windows使ってた時、「何でこんなん書かなアカンの?」となってパニックになりました(笑)。今はもっとDOS窓とかPower Shellとか賢くなってるんで、違ってるかもしれませんが(プログラミング言語によっては、UNIX式の表現を「Windows/DOSのパス表記だ」と判断してくれるブツもあります)。
いずれにせよ、「スペースは名前のウチの一つなんだ」ってぇんで、「\ 」と言うのでスペースを表現して、とか言うクソッタレな事を行わないといけなかったのです。
ちなみに、どんな言語でもエスケープ文字は\なのか、ってぇとそんなこたぁありません。CやCをルーツに設計された言語だと「遠からずUNIXの影響を受けていて」そうなってるだけに過ぎません。
例えば、ANSI Common Lispと言うプログラミング言語だと、エスケープ文字は~(チルダ)が受け持っています。だからWindows上でパスを書く際に、Cで見られるような面倒はありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Excel(エクセル) このコードに追記事項の仕方を教えて下さい。 以下のコード内容に出てくる。セルH3が空白の場合、エラー 4 2023/08/03 00:22
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フルパスから最後のディレクト...
-
ExcelVBAでカレントディレクト...
-
GetPrivateProfileStringでini...
-
マイクラでPythonのプログラミ...
-
どんなプログラムを書いても指...
-
pythonでの日本語操作
-
Excel2013 FSO.getAbsolutePath...
-
絶対パスの絶対て英語で何でし...
-
webアプリケーションでの画像フ...
-
FTPでputすると空ファイルが出...
-
ネットワーク上のコンピュータ...
-
相対パスの指定
-
windows.hがincludeされない
-
フォルダ名をだすには
-
fopenで別ディレクトリにファイ...
-
IIS7.0 他コンピュータへのフ...
-
VBでフォルダ単位のFTP
-
VB.NETでWebアプリを作成後に、...
-
VBAで自身のファイル名を取得す...
-
ファイルやディレクトリの存在...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フルパスから最後のディレクト...
-
どんなプログラムを書いても指...
-
FTPでputすると空ファイルが出...
-
ExcelVBAでカレントディレクト...
-
windows.hがincludeされない
-
GetPrivateProfileStringでini...
-
マイクラでPythonのプログラミ...
-
fopenで別ディレクトリにファイ...
-
「UNCパスはサポートされません...
-
ファイルやディレクトリの存在...
-
ExcelVBA サーバーの(共有フォ...
-
C言語を用いたファイルの一括削...
-
ファイルダイアログのカレント...
-
ネットワーク上のコンピュータ...
-
セルに入力されたパスでフォル...
-
webアプリケーションでの画像フ...
-
エクセルVBAで相対パスでファイ...
-
絶対パスの絶対て英語で何でし...
-
VBでフォルダ単位のFTP
-
EXCELでダイアログボックスを開...
おすすめ情報