0

全て。私の新しいプロジェクトでは、ファイルから名前を読み取る必要があります。特に、ゲームを作成するのが好きな (しようとしている、もっと好きな) 人にとっては、情報を保存するための読み取り/書き込みが非常に役立つことに気付きました。私はそれを調べて、標準ライブラリが再びプルスルーすることを発見しました。その後、少なくとも私にとっては、ios、ios_base、iostream、fstream などのライブラリが複雑に見えることに気付きました。

私は周りを見回しましたが、なぜこの特定のアプローチが機能しないのかよくわかりません。オンラインで見つかった例は、ライブラリに従っているように見えるため、私を困惑させます.cplusplus.comの例を参照します. 興味深いことに、1 つは期待どおりに機能し、もう 1 つはそうではありませんでした。私の知る限り、そうです。

私の問題は、ofstream を使用してファイルを作成できますが、ifstream も fstream も作成できないことです。私が理解しているように、私が使用していたコンストラクター (open に渡すのと同じパラメーター、つまりファイル名とフラグであると私は信じています) は、デフォルトの perameters が異なるという点を除いて同一です - ostream には ios: :out、istream には ifstream には ios::in、fstream には ios::in | があります。ios::out - 両方のフラグ。両方のクラスの組み合わせであるため、論理的です。これは、ファイルが作成される場所の問題ではなく、ファイルが作成されたという事実に注意してください。私がこれを知っている理由は 2 つあります。まず、ofstream を使用すると、ファイルは予想されるディレクトリに表示されますが、ifstream や fstream ではまったく表示されません。次に、is_open 関数を使用して (具体的には、式 "while (is_open)" をテストします。コンソールが閉じられることはありませんでした (私はほとんどの新しい概念をコンソールでテストしましたが、それは単純だからです) が、他のものは閉じました。もしそうなら、スコープの外に出ることができず、デストラクタは開いているファイルの終わりを綴るので、終了することはありませんでした。

私の 2 番目の問題は、gcount の使用に関するものでした。ほとんどの場合、gcount にアクセスする方法です。どのように試しても(std::gcount、file::gcount、fstream::gcount ...)、それが何であるかを認識しませんでした。少し戸惑いました。

ここで、特定の問題のトピックから少し外れますが、そもそもこの問題に遭遇した理由の一般的な理由について詳しく説明します。これは一種の議論ですが、何らかの形で私がこの問題を抱えているのは私だけです。

まず、私が読んだチュートリアル (learncpp.com) は、seekp/seekg 関数を調べており、BYTES で相対的な量を移動すると述べています。これは一般的に char と同じだと思いましたが、別のシステムでは異なる可能性があります (つまり、char が 2 バイトの場合、これを見つけ出し、これをファイル検索に適用できます)。とにかく、本質的に、それは常にキャラクターごとに行われますか?

そして、私の主な疑問は...これらのツールを実際に使用して物事を行う方法です。各行に名前を付けたいとしましょう。それを行う方法が少しわかりません-おそらく改行文字ですか?あるいは、行ごとに名前を読み上げます - 次の行の開始位置をどのように見つけますか? (getline()、次にgcount()、そして出来上がりを使用できると考えたため、gcountに関する私の問題が発生し、その多くの文字を移動できます...ただし、それが機能するかどうかはわかりません)

ありがとう。

4

1 に答える 1

1

質問の1つだけに答えるには、ファイルを作成しないため、でファイルを作成することはできifstreamません。それは単に意図されたものではありません。このクラスのこの目的は、既存のファイルからデータを読み取ることであり、ファイルを開いてそこから読み取るには、最初に存在する必要があります。そのような単純な。

これまでのところfstream、ファイルが存在しない場合にファイルを作成することは理にかなっていると主張することもできますが、実際にはそうではありません。のコンストラクタへの引数はfstream、既存のファイルである必要があります。指定されたファイルが存在しない場合、障害ビットがオブジェクトに設定され、ファイルは作成されません。

于 2012-07-18T02:00:24.530 に答える