問題タブ [iostream]
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++ - fail()がtrueのときにofstreamを開くことができない理由を検出する
このように単純なはずですが、ネット検索では見つかりません。
私は、現在は真実であるオフストリームを持っていopen()
ますfail()
。私と同じように、開かない理由を知りerrno
たいのですがsys_errlist[errno]
。
c++ - std :: fstreamがEOFビットをそのように設定するのはなぜですか?
最近、fstream :: eof()を使用することで問題が発生しました。私はここから次の行を読みました:
関数eof()は、関連付けられた入力ファイルの終わりに達した場合はtrueを返し、それ以外の場合はfalseを返します。
そして(誤って)これは、fstream :: read()を使用してファイルの終わりを超えて読み取った場合、関数eof()が教えてくれることを意味すると想定していました。だから私はこのようなことをしました(非常に一般化されています):
この問題は、上記のリンク先のページで後で説明されていることが原因で発生しました(誤解を招く最初の段落のおかげで、最初は読むことができませんでした)。
逆に、最後のトークンの後に空白がある場合、ストリームはEOF状態にはなりませんが、別のトークンを読み取ろうとすると失敗します。したがって、EOFフラグは、EOFまですべてのストリームコンテンツを読み取ることを目的としたループのテストとして使用することはできません。代わりに、読み取りを試みた後、失敗状態をチェックする必要があります。
そこで変更を加えたところ、ループはfile.eof()ではなくfile.fail()をチェックし、eof()がどのように機能するかを理解しました。私の質問は、なぜそれがそのように機能するのかということです。これが望ましい状況はありますか?EOFを通過すると、EOFを通過し、eof()はtrueを返すはずです。
更新 回答ありがとうございます、私はそれを持っていると思います。私が実行している操作はread()だけで、すぐにfail()をチェックするので、大丈夫だと思います。さて、私の質問は、eof()を何に使用するのかということです。
c++ - C++コードのコンパイル中にios::nocreateエラーが発生しました
一方、RHEL5.0でC++で記述されたパッケージをコンパイルします。次のエラーが発生します。
>エラー:nocreate
のメンバーではありませんstd::ios
ソースコードは以下に対応します:
ifstream tempStr(
argv[4]
、ios::in
|ios::nocreate
);
私が試してみました
#g ++ -O -Wno-deprecated <file.cpp> -o <file>
と同様:
#g ++ -O-o<ファイル>
解決策を提案してください。
c++ - STL ストリームを使用するときに自分のオブジェクトをフォーマットする方法は?
独自のオブジェクトを STL ストリームに出力したいのですが、フォーマットはカスタマイズされています。私はこのようなものを思いつきましたが、ロケールとインビューを使用したことがないので、これが理にかなっているかどうか、MyFacet と operator<< を実装する方法がわかりません。
私の質問は次のとおりです:これは理にかなっていますか? MyFacet と operator<< を実装する方法は?
以下は、私がやりたいことを示す簡単な例です。
c# - RichTextBoxのコンテンツをファイルに書き込む
RichTextBoxがあり、テキストをファイルに保存したいと思います。RichTextBoxの各行はCR+LF( "\ n \ r")で終わりますが、ファイルに保存すると、行の最後にLF文字しか含まれていません。
ファイルの代わりにコンテンツをクリップボードにコピーすると、すべてうまくいきます(クリップボードのコンテンツには、各行の終わりにCR + LFがあり、Notepad ++で貼り付けると表示されます)。txtClassはRichTextBoxです。
private void btnToClipboard_Click(object sender、EventArgs e){//必要に応じて機能しますClipboard.SetText(txtClass.Text); }
この瞬間、私も試してみました
そして、すべてのEncondingの利用可能なもので。
SW.Write( "Line One \ r \ nLineTwo \ r \ nLineThree")を使用すると、正常に機能します。
ご協力いただきありがとうございます
c++ - Windows の basic_iostream で非ロック ストリームの挿入/抽出を取得する方法はありますか?
私は C++ 開発者で、最近まで Windows 向けのアプリケーションの作成を余儀なくされるまで、主に Solaris と Linux でプログラミングを行っていました。
私は、TCP ソケットに支えられた C++ I/O ストリームに基づく通信設計を使用してきました。この設計は、他のスレッドが同じストリームを介して送信する (mutex によって同期される) 間、ストリームから継続的に読み取る単一のスレッド (ほとんどの場合、データを待機するソケット読み取りでブロックされる) に基づいています。
Windows に移行するとき、boost::asio::ip::tcp::iostream を使用してソケット ストリームを実装することにしました。上記のマルチスレッド設計により、Windows でデッドロックが発生したことを知り、がっかりしました。はoperator<<(std::basic_ostream<...>,std::basic_string<...>)
、入力操作と出力操作の両方でストリーム全体をロックする「Sentry」を宣言しているようです。読み取りスレッドは常にストリームを待機しているため、この Sentry が作成されると、他のスレッドからの送信操作がデッドロックします。
operator<< と Sentry の構築中のコール スタックの関連部分を次に示します。
istream コンポーネントと ostream コンポーネントが別々にロックされていれば問題ありませんが、そうではありません。
使用できるストリーム演算子の代替実装はありますか? ロックしないように指示できますか?自分で実装する必要がありますか (これを行う方法がわからない)。
任意の提案をいただければ幸いです。
(プラットフォームは Windows 32 ビットおよび 64 ビットです。Visual Studio 2003 Pro および 2008 Express で観察された動作)
c++ - iostream のバイナリ バージョン
私はiostreamのバイナリバージョンを書いています。基本的に、バイナリ ファイルを書き込むことができますが、ファイルの形式を細かく制御できます。使用例:
my_int を符号なし 32 ビット整数として書き込み、my_string を長さのプレフィックス付き文字列 (プレフィックスは u16le) として書き込みます。ファイルを読み戻すには、矢印を反転させます。よく働く。しかし、私はデザインに問題があり、それについてはまだ迷っています。だから、SOに尋ねる時が来ました。(現時点では、8 ビット バイト、2 の補数の整数、IEEE 浮動小数点数など、いくつかの仮定を立てています。)
内部では、iostream は streambuf を使用します。これは実に素晴らしい設計です。iostreams は ' int
' をテキストにシリアライズするコードを作成し、基になる streambuf に残りを処理させます。したがって、cout、fstream、stringstream などを取得します。これらはすべて、iostream と streambuf の両方で、通常は char でテンプレート化されますが、wchar としてテンプレート化されることもあります。ただし、私のデータはバイト ストリームであり、' unsigned char
' で表すのが最適です。
私の最初の試みは、に基づいてクラスをテンプレート化することでしたunsigned char
。std::basic_string
テンプレートで十分ですが、そうでstreambuf
はありません。という名前のクラスでいくつかの問題に遭遇しましたが、これはテーマcodecvt
に従うことができませんでした。unsigned char
これにより、次の 2 つの疑問が生じます。
1)なぜストリームバッファがそのようなことをするのですか? コード変換は、ストリームバッファの責任から外れているようです-ストリームバッファはストリームを取り、それとの間でデータをバッファリングする必要があります。これ以上何もない。コード変換と同じくらい高レベルなものは、iostream に属するべきだと感じます。
テンプレート化されたストリームバッファを unsigned char で動作させることができなかったので、char に戻り、単に char/unsigned char の間でデータをキャストしました。明らかな理由から、キャストの数を最小限に抑えようとしました。ほとんどのデータは、基本的に read() または write() 関数にまとめられ、その後、基になる streambuf が呼び出されます。(そして、プロセスでキャストを使用します。)読み取り関数は基本的に次のとおりです。
良い解決策、悪い解決策?
最初の 2 つの質問は、さらに情報が必要であることを示しています。最初に、boost::serialization などのプロジェクトが検討されましたが、それらは独自のバイナリ形式を定義するという点で、より高いレベルに存在します。これは、形式を定義する必要がある場合、または形式が既に定義されている場合、または一括メタデータが不要または不要な場合に、より低いレベルで読み取り/書き込みを行うためのものです。
binary::u32le
第二に、修飾子について質問する人もいます。これは、現時点では必要なエンディアンと幅を保持するクラスのインスタンス化であり、将来的には符号付きになる可能性があります。ストリームは、そのクラスの最後に渡されたインスタンスのコピーを保持し、それをシリアル化で使用しました。これはちょっとした回避策でした。最初は << 演算子を次のようにオーバーロードしようとしました。
しかし、当時、これはうまくいかなかったようです。あいまいな関数呼び出しでいくつかの問題がありました。これは特に定数に当てはまりますが、あるポスターが示唆したように、キャストするか、単に . として宣言することもできconst <type>
ます。しかし、他にも大きな問題があったことを覚えているようです。
c++ - C++ Boost io ストリーム、エラー処理
エラーに関して標準ストリームのようにカスタム ストリームを機能させることは可能ですか? デフォルトでは、例外ではなく、good/fail/bad/eof ビットを使用しますか?
ブースト ドキュメントでは、ストリーム エラーに対して std::failure をスローし、他のエラーを伝播させることについてのみ言及しています (たとえば、バッファーを割り当てようとすることによる badalloc)。ただし、ブースト コードはこれらをキャッチしていないようで、代わりにユーザー コードの処理に依存しています。それらですが、私の既存のコードはすべて、エラー後に再試行する必要がある場合に備えて、good()、bad() などのメソッドと clear() メソッドに依存しています。
java - C++ で Java の writeInt メソッドによって書き込まれたファイルから int を読み取りますか?
これを行うにはどうすればよいでしょうか?また、簡単にできる方法はありますか?Boostなどのライブラリを使用していますか?
.net - URLからSystem.IO.Streamオブジェクトに読み込むことは可能ですか?
URLからSystem.IO.Streamオブジェクトに読み込もうとしています。使ってみました
しかし、URI形式がFileStreamオブジェクトでサポートされていないというエラーが表示されます。URLから読み取ることができるSystem.IO.Streamから継承する使用できるメソッドはありますか?