Borland C++Builder5でテキストファイルを読み書きするようなプログラムを作っています。
テキストファイルを読み書きするのに、fopen()、fgets()というような関数を使っています。
しかし、FileOpen()関数などもあり、どちらを使うべきか分かっていません。
結果が同じならどちらでも良いのですが、Windows7が出たり、将来64ビットOSが主流になった時などに、今私が作ったプログラムが動かない、というようなことが起きると困ります。
私にプログラム言語を教えてくれた人が、ちょっと古い人で、昔の知識を引きずっているようなのです。
現状は何も問題は起きていないのですが、ちょっと心配なのです。
No.4ベストアンサー
- 回答日時:
>さて、std::fstremというのはよく分かりません。
std::fstreamの間違いです。
詳細は
http://www.kab-studio.biz/Programing/Codian/iost …
を参照してください。
簡単に言うと
C++の標準ライブラリとして制定された
ファイル入出力クラスです。
"<<", ">>"などによる入出力が行えます。
それから、誤解なさっているといけませんので
補足させてください。
私は、fopen等を完全否定しているわけではありません。
"Effective C++ 第2版"でも指摘されているように、
基本的には"stdio.h"は忘れてiostreamを使うべきだと思います。
しかし、効率などの点でやむを得ず<stdio.h>を使うべき場面が出てくる
ことを否定するわけではありません。
基本はfstream, 限定的にstdio.hであって、
stdio.hをフルに採用して、fstreamを使わないというのは
"違う気がする"
と述べたのです。
>それから、一番聞きたかったことは、fopenやfgetsを使って作った実行ファイル>が、OSが新しくなることで動かなくなることがあるか、ということです。
これは、基本的には、ありえません。
32ビット環境と64ビット環境のようなまるっきり違う環境でもない限り
大丈夫です。
現時点では、C++標準化委員会はCとの互換性を最大限尊重しています。
(完全な互換性にはこだわっていませんが...)
ですから、Cの標準関数がばっさり切られる可能性は殆どないのでは
ないでしょうか?
BLK314さん、ありがとうございました。
御礼が遅くなり申し訳ありませんでした。
>それから、誤解なさっているといけませんので
多分誤解していません。
C++コンパイラーを使うなら、C++関数を使った方がよい、ということは感じています。
もしかしたら、私のプログラミングは「飛行機でドライブしている」ようなものかも知れません。
つまり「空を飛ぶ」という機能があるのに、あえて「地上を走っている」状態なのかも。
目的地には、どちらでも到達できるのですが効率が違います。
もう少しC++を勉強しなくてはいけませんね。
納期のことを考えると、stdio.hを捨てるのは簡単には出来ません。
しかし、どこかで決心をしなくてはいけませんね。
No.3
- 回答日時:
fopenやfgetsもC++の標準関数ですので、使ってはいけない理由はありません。
どちらかというと低水準な関数群ですので、効率を重視する場合にはこちらの方が向いています。
また、例外ハンドラやデストラクタなど、勝手に例外を送出して欲しくない文脈で使うときにも便利です。
要はケースバイケースで、適切に使い分けることが重要ですね。
jactaさん、ありがとうございました。
なるほど、専門家の皆さんでも意見が分かれるのですね。
私はテキストファイル専門なのですが、順次呼び出しの他にも、fseekを使って、テキストファイルをランダム読みするプログラムも作ります。
こんな場合でもfopenやfgetsで狙いが果たせたので、他の関数を勉強しようという気にならないでいました。
でも、皆さんの話がよく分からない部分もあって、やはり勉強不足を痛感しました。
fopenやfgetsが完全否定されなかったので少し安心しましたけど・・・。
No.2
- 回答日時:
C++でfopenは"違うのでは"と思っています。
fopen, fgetsはCの標準関数であり、C++の標準関数ではありません。
従って"例外を投げる"ことができません。
"自分でfopenの戻り値をチェックし、例外を投げるようにラッピングすればいいのでは?"
確かに、そのとおりです。
しかし、"車輪の再発明"という言葉もあります。
(実装がどうなっているかは別として)
同じ様な事をstd::fstreamを始め、MFCのCFileなど多くのライブラリがサポートしています。これらはC++専用ライブラリです。C++では当然こちらを採用すべきと考えます。
互換性という点なら
std::fstremがお勧めです。
これらは"C++ 標準化委員会"できちっと審査され、規格になっています。
もちろん、規格自体、未来永劫、永久不変であることが保障されているわけではありませんが、専門家が集まって、多角的な検討を加えて議論しているものですので、1メーカーの営業戦略とかに左右されることはないと思われます。その意味では信頼して良いのではないでしょうか?
ありがとうございました。
「車輪の再発明」という言葉は初めて聞きました。
Netで調べたらたくさん出て来て、有名な言葉だったんですね。
ちょっと耳の痛い話です。
さて、std::fstremというのはよく分かりません。
改めて参考書を開くと、
infile.open()
infile.getline()
などの記述がありましたが、このことでしょうか?
再度、勉強しなおす必要がありそうです。
それから、一番聞きたかったことは、fopenやfgetsを使って作った実行ファイルが、OSが新しくなることで動かなくなることがあるか、ということです。
もちろんそのOSが32ビットを保証しない、というものなら仕方がないのですが、同じコンパイラーで作ったプログラムで、fopenだと動かないが、別の関数を使って作ってあれば動く、というようなことがあるだろうか、という心配なのです。
この辺についてもアドバイスいただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows Media Playerを開くと...
-
gcc に mktemp 危険と怒られ...
-
Google ColaboでGUI作成
-
(C言語等で)既存ファイル群の属...
-
ランタイムの要らない言語
-
本格的なGUIを作るのにおすすめ...
-
python urlopen error について...
-
モバイルCというC言語のプログ...
-
[DirectX]SDK直叩き or 既存の...
-
強化学習の環境作成、AI。自動...
-
プログラマーで「使えない人」...
-
システムコールと標準ライブラ...
-
マウスのクリックを自動で
-
外付けHDDにあるiTunesのデータ...
-
iPhoneのカメラロールへ画像を...
-
c言語でntpdateコマンドにあた...
-
Dreamweaverのライブラリが反映...
-
DXライブラリで作ったゲームを...
-
至急!!iTunesライブラリデー...
-
iCloudフォトライブラリ内の画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows Media Playerを開くと...
-
Google ColaboでGUI作成
-
python urlopen error について...
-
iCloudフォトライブラリ内の画...
-
本格的なGUIを作るのにおすすめ...
-
LIBCMT.LIBをリンクしてコンパ...
-
三目並べを作っているのですがD...
-
マウスのクリックを自動で
-
C++ 標準ライブラリの実際の中...
-
プログラマーで「使えない人」...
-
declaration of 'index' shadow...
-
unix-c と linux-c の違いは?
-
boostのアンインストールについて
-
設定ファイルを扱うライブラリ...
-
じゃんけんゲーム(DXライブラ...
-
iPhoneのカメラロールへ画像を...
-
ライブラリ作成時のグローバル...
-
Dreamweaverのライブラリが反映...
-
Ps+のフリープレイでDestiny2の...
-
sleep関数
おすすめ情報