問題タブ [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 投票する
2 に答える
5847 参照

c++ - C ++でのテキストファイルから配列への入力の読み取り

私はプログラミングの初心者なので、優しくしてください。これまでのところ、私は C++ しか勉強しておらず、コンパイラとして Visual Studio 2010 を実行しています。このプログラムでは、テキスト入力ファイルから読み取り、情報を 3 つの配列のセットに書き込もうとしています。1 つの配列は名前のリストを処理し、残りの 2 つはそれぞれ勤務時間と時給です。後者の 2 つを使用して一連の収益を計算し、全体をレポートとして別のテキスト ファイルに出力します。ただし、私の問題は、最初の配列の入力を取得することです。私が使用している入力ファイルには、次のように配置されたテキストがあります。

J. Doe* 35 12.50 J. Dawn* 20 10.00 ..........

ifstream getline を使用して区切り記号として機能するアスタリスクを使用して名前を取得し、次の 2 つの数値を他の 2 つの配列に書き込もうとしているため、名前の後にアスタリスクが付きます。後者の 2 つの値は空白で区切られているため、問題は発生しないと思います。処理が必要なエラーが他にもあると確信していますが、残りのデバッグを開始する前に、最初のエラーを処理する必要があります。

エラー C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std ::streamsize,_Elem)': パラメータ 1 を 'std::string' から 'char *' に変換できません。

私が他の場所で読んだことから、問題は文字列を char 配列に書き込もうとしたことに起因すると思いますが、データ型が異なるため機能しません。名前を数値から分離するには区切り文字が必要なので、名前を取得するための他の実行可能な方法が存在するかどうかはわかりません。この問題を解決する方法についてアドバイスをいただければ幸いです。

ここに私が書いたソースがあります:

プログラム全体を含めて、コーディングのどこに行く予定かを理解してもらいます。助けてくれてありがとう!

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

c++ - テキストファイルからc++の配列への入力の読み取り

さて、私はプログラミングの初心者なので、優しくしてください。これまでのところ、C ++のみを学習しており、コンパイラとしてVisualStudio2010を実行しています。このプログラムでは、テキスト入力ファイルから読み取り、3つの配列のセットに情報を書き込もうとしています。1つの配列は名前のリストを処理し、他の2つはそれぞれ労働時間と時給です。後者の2つを使用して一連の収益を計算し、それらの計算を別のテキストファイルに出力します。ただし、私の問題は、最初の配列の入力を取得することです。私が使用している入力ファイルには、次のように配置されたテキストがあります。

J. Doe * 35 12.50

J.ドーン*2010.00........。

ifstream getlineを使用して、アスタリスクが区切り文字として機能する名前を取得し、次の2つの数値を他の2つの配列に書き込んでいるため、名前の末尾にはアスタリスクが付いています。後者の2つの値は空白で区切られているため、問題が発生することはないと思います。処理が必要な他のエラーがあると確信していますが、残りのデバッグを開始する前に、最初のエラーを処理する必要があります。inFile.getlineを呼び出す行でエラーが発生しました。これは次のようになります。

エラーC2664:'std :: basic_istream <_Elem、_Traits>&std :: basic_istream <_Elem、_Traits> :: getline(_Elem *、std :: streamsize、_Elem)':パラメータ1を'std::string'から'に変換できません'char*'。

私が他の場所で読んだことから、(私が思うに)問題は文字列をchar配列に書き込もうとすることに起因しますが、それらは異なるデータ型であるため機能しません。名前を数値から分離するための区切り文字が必要なため、名前を取得するための他の実行可能な方法が存在するかどうかはわかりません。この問題を解決する方法についてのアドバイスをいただければ幸いです。

これが私が書いた情報源です:

プログラム全体を含めて、コーディングをどこに進めるかについてのアイデアを提供します。助けてくれてありがとう!

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

c++ - プッシュ後に正しいテキストを取得し、std::queue から front() を取得するときにエラーが発生しました

私はここで少し困っています...最初に要件から始めます:

  1. データ (msg) をサーバーに送信してみる
  2. 失敗した場合は、ローカルのハードディスク ファイルに CSV エントリのリストとして保存します。
  3. あらかじめ決められた時点でメッセージ データをサーバーに送信してみてください。
  4. メッセージが正常に送信された場合は、ファイルから削除します
  5. サーバーへのデータ送信が失敗するまでプロセスを続行します。ステップ 2 に進みます

私がやった事:

  1. fstream オブジェクトを使用して、失敗したメッセージをローカル ファイルに書き込みました
  2. fstream オブジェクトを使用してこのファイルから読み取り、動的に作成された std::queue に格納します
  3. ファイルから読み取られたメッセージごとに、それをキューにプッシュします
  4. すべてのメッセージをプッシュした後、std::front() を使用して最初のメッセージを取得し、それをカスタム オブジェクト データ構造に読み込みます。

問題は次のとおり です。キューにプッシュする前後に、ハードディスクファイルから読み取ったメッセージを出力します。キューをプッシュする前に、メッセージ ボックス/テキスト ファイル ログに出力するデータは問題ありません。しかし、queue:front() を取得した後に同じデータを出力すると、すべてのジャンクが出力されます。*

私はキューと STL の専門家ではないので、ガイドが必要です。

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

p>

ありがとう、ダニエル

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

c++ - fstreamのバイナリデータを演算子>>で読み取れないのはなぜですか?

私が次のようなことをした場合:

私のストリームは常にを設定しfailbit、は初期化されdataないままになります。charただし、またはの代わりに読んだ場合unsigned char、ストリームは正常です。 perror()「結果が大きすぎる」と言っています。

私がグーグルで見た唯一のことはoperator>>、バイナリデータには使用すべきではないという提案でした(prefer read())が、演算子はよりクリーンで使いやすいと思います-そしてそれはすべてをキャストする必要はありません。

誰かがこの問題を説明できますか?

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

visual-c++ - なぜVC++2010は、basic_filebufを表すためにwchar_tバッファーではなくcharバッファーを使用するのですか?

VC ++のドキュメントに次のように書かれているのは非常に奇妙です:(http://msdn.microsoft.com/en-us/library/tzf8k3z8 (VS.90).aspx )

"タイプbasic_filebufのオブジェクトは、タイプパラメータElemで指定されたchar_typeに関係なく、タイプchar *の内部バッファで作成されます。これは、Unicode文字列(wchar_t文字を含む)が以前にANSI文字列(char文字を含む)に変換されることを意味します。内部バッファに書き込まれます。Unicode文字列をバッファに格納するには、タイプwchar_tの新しいバッファを作成し、basic_streambuf :: pubsetbuf()メソッドを使用して設定します。この動作を示す例を確認するには、以下を参照してください。」

なんで?

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

c++ - C++ ifstream/fstream データの破損

私は C++ が初めてで、学校の課題をやらなければなりません。

API 呼び出しやシステム統合コマンドを使用せずにバイナリ* ファイルをコピーする必要があります。学校では Windows マシンを使用しています。

少し調べてみたところ、API を使用せずにデータをコピーする最善の方法は、iostream (ifstream/fstream) を使用することであることがわかりました。使用しているコードは次のとおりです。

out.exe が正常に動作していません。winhex.exe で調べたところ、何もしていないのにデータが変更されていることがわかりました。

誰でも私を助けることができますか?

*このファイルは単純な hello world プログラムで、メッセージ ボックスに "hello world" が含まれています。

編集:

無反応でごめんなさい、寝てました。とにかく、16進エディタ内で(結果と元の)両方のプログラムを開きました。私はすべてこの行を試しているようです:

これに変更:

読み取りまたは書き込みプロセス中に何らかの形で表示または表示できないように、バイトが削除されます (または追加されることもあります)。

0 投票する
9 に答える
393 参照

c++ - C++でのファイルI/O

私がやりたいのは、readme.txtの内容を20回印刷することだけです。助けてください。

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

c++ - C ++ ofstream-ファイルに書き込まれる文字列は1つだけで、前の文字列は上書きされます。なぜですか?

新しいターゲットファイルに行ごとにパイプすることで、アーカイブされたサーバーログをクリーンアップして再編成するコマンドラインプログラムを作成しました。各ターゲットファイルには、それに応じたregExフィルター項目があるため、ソースファイルからの赤い行がこの特定のターゲットファイルに書き込まれる場合、それがregExと一致します。

構成ファイルから正規表現文字列とそのターゲットファイル文字列を読み取り、これらの情報をベクトルに保存して、構成から赤くなった新しいタゲット/フィルターのペアごとに1つずつ動的にサイズを変更できるようにします。

次のコードは、すべてのソースファイルをループする方法を示しています。すべてのソースファイルについて、行ごとに読み取り、赤になる可能性のあるすべての行について、構成で定義されたすべてのフィルターを循環し、正規表現が行と一致するかどうかを確認します。この行をofstreamに書き込みます。これを行うたびに、ofstreamは、新しいターゲットファイルを開く前にclose()dおよびclear()されます。

私の問題は、プログラムの終了後にターゲットファイルに含まれる単一の文字列が1つしかないことを除いて、すべてが正常に機能することです。ファイルに書き込んだ最後の文字列が含まれています。

以前にファイルに書き込んだ文字列はすべて上書きされているようです。私は何か間違ったことをしていると思いますが、それが何であるかわかりません。

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

編集:

使用している再開機能を忘れてしまいました

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

c++ - ファイルからの読み取りに問題があります。時期尚早に EOF に到達するように見える

この問題は比較的簡単に解決できると確信していますが、問題を見つけるのに苦労しています。私のコードは、ファイルからすべての単語を読み取り、各単語、単語の位置、文の開始と終了を配列に格納するだけです。配列は別のテキスト ファイルに出力されます。

最後の文まですべての情報を読み取ることができますが、バグがあります。何かご意見は?

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

c++ - シンボリックリンクとファイルリダイレクト

C ++では、開いているファイルがシンボリックリンクを介してリダイレクトされているかどうかを確認するにはどうすればよいですか?これが私のファイルオープナーハンドラーです:

前もって感謝します