問題タブ [fstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
1082 参照

c++ - ファイルの読み取りと繰り返し文字の削除

したがって、私の目標は、部分的に埋められた文字の配列を仮パラメーターとして持ち、配列から繰り返されるすべての文字を削除する関数を作成することです。したがって、「11 ABC abca A ggt」のような内容の .txt ファイルを読み取り、プログラムに「ABC abcg t」を吐き出させるだけです。

今のところ、私のプログラムは「1 ABC abc」を吐き出します

これについて何か助けていただければ幸いです。

これが私が持っているものです...

0 投票する
2 に答える
4615 参照

c++ - C++ テキスト ファイル ポインタの問題

(ファイルが既に存在する場合) 最初の数値を 1 つ増やし、関数のパラメーターをファイルの末尾に追加する関数を作成しています。

例:

  1. 追加 (4,9);
  2. 追加 (5,6);

1 のファイルの内容: 1 \n 4 \n 9

2 のファイルの内容: 2 \n 4 \n 9 \n 5 \n 6

プログラムは 2 番目の while ループに入らないため、内容が配列にコピーされてからファイルにコピーされることはありません。問題が何であるか、またはそれを修正する方法が正確にわかりません。どんな助けでも大歓迎です。:)

0 投票する
3 に答える
940 参照

c++ - C++ を使用してバイナリ ファイルを作成する: デフォルトのロケールは重要ですか?

バイナリ フラグが設定された fstream を使用し、フォーマットされていない I/O 関数の読み取りと書き込みを使用して、バイナリ ファイルを操作するコードがあります。これは、私が今まで使用したすべてのシステムで正しく動作します (ファイル内のビットは正確に期待どおりです) が、基本的にすべて米国英語です。これらのバイトが別のシステムの codecvt によって変更される可能性について疑問に思っていました。

標準では、フォーマットされていない I/O を使用することは、sputc/sgetc を使用してストリームバッファに文字を入れるのと同じように動作すると述べているようです。これらは、streambuf のオーバーフロー関数またはアンダーフロー関数が呼び出されることにつながり、一部の codecvt を通過するように思えます (たとえば、c++ 標準の 27.8.1.4.3 を参照)。basic_filebuf の場合、この codecvt の作成は 27.8.1.1.5 で指定されています。これにより、結果は basic_filebuf.getloc() が返すものに依存するように見えます。

それで、私の質問は、あるシステムで of​​stream.write を使用して書き出された文字配列が、別のシステムで ifstream.read を使用して逐語的に復元できると仮定できますか? 私は次の仮定をします:

  1. プログラムはデフォルトのロケールを使用しています (つまり、プログラムはロケール設定自体をまったく変更していません)。
  2. どちらのシステムもCHAR_BIT 8を持ち、各バイト内で同じビット順序を持ち、ファイルをオクテットとして保存するなど.
  3. ストリーム オブジェクトにはバイナリ フラグが設定されています。
  4. この段階では、エンディアンの違いについて心配する必要はありません。配列内のいずれかのバイトがマルチバイト値として解釈される場合、エンディアン変換は後の段階で必要に応じて処理されます。

デフォルトのロケールが、一部のシステム構成で変更されていないものを通過することが保証されていない場合 (アラビア語かどうかはわかりません)、C++ を使用してバイナリ ファイルを作成する最良の方法は何ですか?

0 投票する
2 に答える
4272 参照

c++ - ファイルから2次元配列へのテキストのロード(C ++)

私はゲームを作成していて、マップデータをサイズの2次元配列に保存しました[34][10]。もともと私は、配列を埋めるための単純な関数を使用してマップを生成し、次のコードを使用してこのデータをファイルに保存しました。

これにより、希望どおりのテキストファイルが出力されます。ただし、次のコードを使用して読み戻そうとすると、アクセス違反が大量に発生し、実行時にクラッシュします。

誰かが問題が何であるか知っていますか?

0 投票する
5 に答える
594 参照

c++ - Fstreamの一部をIstringstreamにコピーする

解決策をたくさん探した後、私は実際に助けを求めることにしました!

いくつかのブロックで構成されるファイルがあり、各ブロックは圧縮されている場合とされていない場合があります。各ブロックの前には、ブロックのサイズとブロックが圧縮されているかどうかが示されます。各ブロック内には、ブロックを識別する文字列があります。ブロック名を指定して、ファイルから関連するブロックを取得したいと思います。

私の最初の考えは、圧縮フラグとブロックのサイズを読み取り、ブロックだけをistringstreamに読み取り、必要に応じてistringstreamを解凍してから、ブロック名を検索することです。圧縮フラグとブロックのサイズを読み取ることはできますが、ファイルデータのブロックをistringstreamに読み込む方法がわかりません。人々がファイル全体をistringstreamに読み込んだ場所はわかりますが、各ブロックを解凍する必要がある場合とない場合があるため、これは行いたくありません。

私が見逃したアイデアや解決策へのリンクはありますか?または、より良いアルゴリズムはありますか?コメントありがとうございます。

0 投票する
6 に答える
2152 参照

c++ - ファイルへの同時書き込み

単一のログのようなファイルが複数のプロセスによって書き込まれるこのツールがあります。

私が達成したいのは、ファイルを最初に開いたときにファイルを切り捨て、最後にファイルを開いたいくつかのプロセスによってすべての書き込みを行うことです。出力が混乱しないように、すべての書き込みは体系的にフラッシュされてミューテックスで保護されます。

最初に、プロセスはファイルを作成し、次に一連の他のプロセスを一度に 1 つずつ開始し、ファイルを開いて書き込みます (マスターは追加のコンテンツでチャイムを鳴らすことがあります。スレーブ プロセスは開いている場合と開いていない場合があります。何かを書いている)。

可能な限り、既存のものよりも多くの IPC を使用しないようにしたいと思います (現在行っているのは、popen で作成されたパイプに書き込むことだけです)。CRT と Win32 API 以外の外部ライブラリにはアクセスできず、シリアライゼーション コードの記述を開始したくありません。

ここに私が行った場所を示すいくつかのコードがあります:

まあ、これはうまくいきません: スレーブ プロセスの出力は期待どおりに並べられますが、マスターが書き込む内容は、存在する場合でも、一緒にまとめられているか、間違った場所に置かれています。

2 つの質問があります: ofstream のコンストラクターに与えられたフラグの組み合わせは正しいものですか? とにかく私は正しい道を進んでいますか?

0 投票する
7 に答える
3020 参照

c++ - ビットマップを読み取らずに文字をスキップするfstream

fstream を使用して bmp ファイルを読み込もうとしています。ただし、たとえば、値 42 4d 8a 16 0b 00 00 00 00 00 36 の場合、08 と 0E (16 進数) の間の値はスキップされます。

それは読む

42 4d 8a 16 00 00 00 00 00 36

ドキュメントに存在しないように 0b をスキップします。

何をすべきか?

コード:

編集:in.read(a,1);代わりに使用in>>a;すると読み取りの問題が解決しますが、符号なし文字を書き込む必要があり、符号なし文字をf.write(a,1);受け入れません。unsigned chars で書き込みを行う機能を持っている人はいますか?

0 投票する
2 に答える
719 参照

c++ - fstream tellgを使用して、ストリームの一部を最後まで読み取ります

書き込まれている大きなログファイルのチャンクを取得する必要があるこの単純なコードがあります。ある時点で、streamposから返された現在の場所を保存しますstart = istream :: tellg(); 方法。後で、コードは最初から最後までストリームからバッファーを読み取る必要があります。コードはおおよそ次のようになります。

私が観察している効果は、size_readsize_to_readよりも小さく、ストリームにeofフラグが設定されていることです。終了ポインタはストリームが終了する場所を正確に指定し、read()メソッドはその正確な量のデータを返す必要がありますか?それは大丈夫です、私はeofフラグをチェックすることによってそれを回避することができます。しかし、誰かがこの効果の説明を提供できますか?

ありがとう。

0 投票する
1 に答える
2214 参照

c++ - tellg() が失敗する考えられる理由は?

ifstream::tellg()特定のファイルに対して-13を返しています。

基本的に、私はいくつかのソース コードを分析するユーティリティを作成しました。私はすべてのファイルをアルファベット順に開き、「Apple.cpp」から始めて完全に動作します..しかし、「Conversion.cpp」に到達すると、常に同じファイルで、1 行を正常に読み取った後、tellg() は -13 を返します。

問題のコードは次のとおりです。

コードAtEofは次のとおりです。

Conversion.cpp の最初の行を正常に読み取った後、常にクラッシュしDEBUG - tellg(): -13ます。

これはクラス全体TextIFileです(私が書いたもので、エラーがあるかもしれません):

プラットフォームは、Visual Studio、32 ビット、Windows です。

編集: Linuxで動作します。

編集:原因が見つかりました:行末。Conversion と Guid とその他の両方に \r\n の代わりに \n がありました。代わりに \r\n で保存しましたが、うまくいきました。それでも、これは起こらないはずですよね?

0 投票する
2 に答える
35903 参照

c++ - ios::binary または ios::out またはその両方でファイルを開くことの違いは何ですか?

次のようなファイルを開くことの違いを理解しようとしています:

また

また

これらの形式はすべて同一であることがわかりました。すべての場合において、ファイルへの同じ出力は、 または のいずれ*fileName*<<かを使用して生成されます*fileName*.write()