問題タブ [ofstream]
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.
c++ - std::ofstream のより高速な代替手段
一連のデータ ファイルを生成します。ファイルは読み取り可能であると想定されているため、テキスト ファイルです(バイナリ ファイルではなく)。
ファイルに情報を出力するために、私は非常に便利なstd::ofstreamオブジェクトを使用しました。
最初は、エクスポートするデータが小さかったとき、ファイルへの書き込みに必要な時間は目立ちませんでした。ただし、エクスポートする情報が蓄積されているため、現在は生成に 5 分程度かかります。
待っていることに悩まされ始めたので、私の質問は明らかです. std::ofstreamに代わるより速い方法はありますか? より高速な代替手段がある場合、アプリケーションを書き直す価値はありますか? つまり、節約できる時間は +50% になるでしょうか? ありがとうございました。
アップデート:
上記のファイルを生成するコードを表示するように求められたので、ここに示します -最も時間のかかるループ:
c++ - 開かれていない C++ のストリームのデータをファイルに書き込むことは可能ですか?
未開封とは:
だから私はメソッドofstream
を呼び出さずにテキストを入れました。.open()
g++ は文句を言わないので、まだデータを保存できるのでしょうか? どのように?
c++ - C++ 新しい行をストリーム解除する
オフストリームで改行しようとしていますが、うまくいきません。すべてが OUTPUT.txt の同じ行に書き込まれます
私も試しました
と
と
すべてが同じ行に書かれていて、新しい行はありません... 何か足りないものがありますか?
c++ - ofstreamリークメモリ
データをバイナリに書き出すC++クラスがありますstd::ofstream
。クラスはデータをとして保存していますboost:shared_array
が、問題としてこれを排除しました。問題は、のへの呼び出しにwrite()
ありofstream
ます。
問題は、メモリがリークしているように見えることです。それが実行されているシステムはCentOS64ビット、GCC4.1.2です。
top
アプリケーションが実行されていることをfree
確認すると、実行可能ファイル自体はメモリを消費し続けません(Netbeansのメモリプロファイラによってバックアップされます)が、空きシステムメモリの量は時間の経過とともに減少します。さらに、アプリケーションが終了しても、このメモリは再利用されません。
これは特に問題です。これは、約50MB/秒で何時間も連続してディスクに書き出すことを目的としているためです。ただし、約90MBの空きシステムメモリに達すると、それは「安定化」し、それ以上減少しないように見え、アプリケーションは引き続き正常に実行されます。しかし、それは他の実行中のプロセスのためにシステムを台無しにします、それは悪いです、mmkay。
以下は、悲しみを引き起こしているクラスの非常にわずかに単純化されたバージョンです。
ofstreamは初期化され、他の場所で破棄されますが、基本的には「永遠に」書き込むことができます。
c++ - ファイルストリームオブジェクトの適切な選択
アプリケーションはRapidXMLを使用してXMLファイルを編集します。編集は自動化されておらず、時々行われます。XMLコンテンツはGUIに表示され、ユーザーはXMLを変更するいくつかのアクションを実行します。各変更はすぐにディスクに保存する必要があります。
RapidXMLドキュメントオブジェクトをロードするには、ファイルの内容を文字列にコピーする必要があります。ドキュメントを変更するたびに、ドキュメントオブジェクトのコンテンツがファイルにコピーされます。
この例では、ファイルは入力と出力の両方に使用されます。この場合、すべての入出力操作に単一のオブジェクトを使用する必要がありますか?std::fstream
これは、アプリケーションの起動時に一度開かれ、入出力に使用され、アプリケーションの終了時に閉じられます。
std::ifstream
std::ofstream
または、ファイルの入出力を実行する必要があるときはいつでも、のローカル(一時的な)インスタンスを使用する必要がありますか?たとえばstd::ifstream
、ファイルを読み取るために最初に使用されます(開く、読み取る、閉じる)。同様に、std::ofstream
DOMをファイルにエクスポートする必要がある場合(開く、書き込む、閉じる)に使用されるインスタンス。
ここでは(アプリケーションの性質上)パフォーマンスについては心配していませんが、この場合のファイルストリームオブジェクトの適切な選択については興味があります。
c++ - ostream/ofstream 継承の問題
C++ プログラムを書いていますが、エラーを理解するための助けが必要です。
デフォルトでは、私のプログラムは端末 (STDOUT) に出力します。ただし、ユーザーがファイル名を指定すると、プログラムはそのファイルに出力します。端末に書き込む場合はstd::cout
オブジェクトを使用しますが、ファイルに書き込む場合はオブジェクトを作成して使用しstd::ofstream
ます。
ただし、端末またはファイルに書き込む必要があるかどうかを継続的に確認する必要はありません。std::cout
とオブジェクトの両方がクラスstd::ofstream
から継承されるため、オブジェクトを受け入れるstd::ostream
一種の関数を作成することにしました。この関数を呼び出す前に、ファイルに出力する必要があるかどうかを確認します。その場合は、オブジェクトを作成して print 関数に渡します。そうでない場合は、単純に print 関数に渡します。印刷機能は、印刷先を気にする必要はありません。print_output
std::ostream
std::ofstream
std::cout
これは良いアイデアだと思いましたが、コードをコンパイルできません。ここでは、単純化しすぎた例を作成しました。これがコードです...
...そしてここにコンパイル時のエラーがあります。
これらのエラーが発生する理由について何か考えはありますか? 何か間違ったコードを書いたのでしょうか、それとも私のアプローチに根本的な問題がありますか?
ありがとう!
c++ - デスクトップ上のフォルダにテキストファイルを作成する方法
プロジェクトに問題があります。デスクトップにプロジェクトフォルダがあります。テキストファイルを作成して、このテキストファイルを含む何かを書きたいです。それが私のコードです:
ofstream example("/Users/sample/Desktop/save.txt");
しかし、私はそれが他のマックを実行できるようにしたいです。save.txtのアドレスを何に書くべきかわかりません。
誰か助けてもらえますか?
c++ - C++、std::ofstream、例外
このコードのどこが間違っていて、それを修正する方法は?
c++ - std :: ofstreamは移動可能ですか?
私はMSVC10でうまくコンパイルされるこのマップを持っています:
しかし、C++0xを有効にしてg++4.5を使用しているubuntuでは、次のエラーメッセージが表示されます。
/usr/include/c++/4.5/bits/ios_base.h|785|error:'std :: ios_base :: ios_base(const std :: ios_base&)'はプライベートです
オブジェクトの代わりにポインタを使用することで、問題を解決しました。
Webで検索したところ、ストリームはコピーされたものではないことがわかりました(理由は十分に説明されています)。しかし、私の質問は、std :: ofstreamは活字ですか?もしそうなら、それは標準コンテナのテンプレートパラメータとしての使用を許可すべきではありませんか?
はいの場合、この点でg ++はMSVC10よりも遅れていますか?(これは、MSVCで動作する理由を説明します)。コンパイラの作成者に、最終的なものでもないものを完全に実装するように依頼するのはばかげていることは知っていますが、将来については興味があります。
g++4.6.1を使用しても役に立ちませんでした。
編集:コメントを読んでもう少し掘り下げたところ、地図の宣言ではなく、挿入が問題の原因であることがわかりました。
Cubbiのリンクを読んで私は以下を試しました:
しかし、それでも運はありません。g ++は、削除されたコピーコンストラクターの使用について不平を言います。
c++ - ofstream によるファイルへの書き込みエラー
ofstream を使用して番号をファイルに書き込む際に問題があります。数字を書くと、数字の代わりにこの█のような文字があります。ファイルに書き込む方法は次のとおりです。
正しい方法はありますか、それとも別のファイルライターメソッドを使用するだけですか? ありがとう。
編集:
正常に動作します。ありがとう