私はブーストを使用してファイルを開きたい::のiostream ::このコードのファイルができません理由は分かりません。 boost :: iostreams :: file_sinkを使うとうまくいきます。多分あなたは何が間違っているのか考えているでしょうか?私は何かを忘れましたか?私はブーストバージョン1.60を使用していますはブーストで開いているファイル::のiostream ::ファイル
2
A
答えて
2
iostreams/device/file.hppを見ると、コンストラクタがデフォルトのオープンモードin|out
を提供していることがわかります。
basic_file(const std::string& path,
BOOST_IOS::openmode mode =
BOOST_IOS::in | BOOST_IOS::out,
BOOST_IOS::openmode base_mode =
BOOST_IOS::in | BOOST_IOS::out);
、それはこのモードでopen(...)
メソッドを呼び出しています。
template<typename Ch>
basic_file<Ch>::basic_file
(const std::string& path, BOOST_IOS::openmode mode,
BOOST_IOS::openmode base_mode)
{
open(path, mode, base_mode);
}
open(...)
方法は、このモードを使用して、impl
の新しいインスタンスを作成します。
template<typename Ch>
void basic_file<Ch>::open
(const std::string& path, BOOST_IOS::openmode mode,
BOOST_IOS::openmode base_mode)
{
pimpl_.reset(new impl(path, mode | base_mode));
}
実装では、ファイルI/Oのためのstd::basic_filebuf
を使用しています。
struct impl {
impl(const std::string& path, BOOST_IOS::openmode mode)
{ file_.open(path.c_str(), mode); }
~impl() { if (file_.is_open()) file_.close(); }
BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) file_;
};
iostreams/detail/fstream.hppに定義されるマクロ:
今# define BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) std::basic_filebuf<Ch>
、std::basic_filebuf
のドキュメント(または特異的に、そのopen(...)
方法)によれば:
openmode & ~ate Action if file already exists Action if file does not exist ------------------------------------------------------------------------------ out|in Read from start Error
ファイルがまだ存在しないときに新しいファイルを作成するには、適切なオープンモードを指定する必要があります。あなたの場合、これは既に存在するファイルに何を起こしたいかによって、in|out|app
またはin|out|trunc
のいずれかを意味します。
関連する問題
- 1. ブーストiostreamソケットでファイルを読み書きする
- 2. ブーストiostreamで接続ごとに複数のファイルを送信
- 3. ブーストiostreamでのQTリンカエラー
- 4. 「のiostream」ファイル
- 5. gnuplot-iostreamはブーストにリンクしていません
- 6. ブーストASIOのIP TCPのiostreamエラー検出
- 7. デジタル火星 - 入力ファイル「のiostream」を開くことができない
- 8. 開いているファイル - セキュリティ
- 9. C++ iostream - 出力ファイルが作成されていません
- 10. iostreamは、gzip形式のファイルを読み込んで圧縮することができますか?私はブーストのiostreamを使用してgzipで圧縮されたファイルを読んでいます
- 11. クロスブラウザの開いているファイルのブラウズダイアログ
- 12. Eclipseの開いているファイルのリスナー
- 13. 開いているファイル/開いているタブに移動
- 14. 開いているファイルを閉じる?
- 15. のVim:E212は:SUで書くため、開いているファイルが
- 16. 開いて複数のファイルとは、私は複数のファイルを開くには
- 17. iostreamファイルが見つかりません
- 18. ファイルを別のディレクトリに開いてファイルを開く - ruby
- 19. 既にvimで開いているファイルのリストにファイルを追加する
- 20. ファイルが開いている場合ファイルを前面に取得
- 21. Digital Mars Compiler(Code :: Blocks)ファイル 'iostream'を開くことができません
- 22. ループのファイルを開いてコピーする
- 23. Rubyで開いているファイルを読むには
- 24. ブーストの新鮮なダウンロードでJamファイルが見つからない
- 25. boostのiostreamで圧縮ファイルを読み書きする
- 26. 既に開いているファイルを.OpenFile()するのはいいですか?
- 27. <iostream>と#includeの "iostream"(引用符)の違いは?
- 28. ExモードでVimのExモードで開いているファイル名
- 29. のWebViewでのAndroidのウェブサイト、開いているファイルのアップロードダイアログ
- 30. クロムは新しいタブでpdfファイルを開いています
私はいくつかのテストを行い、boost :: iostreams :: fileは既に存在するオープンファイルのように見えます。ですから、std :: ofstreamでファイルを作成しなければなりません。しかし、それはまた、ブーストで作成する必要がありますか? – Paul
[[1](https://github.com/boostorg/iostreams/blob/develop/include/boost/iostreams/device/file.hpp))[[2](https ://github.com/boostorg/iostreams/blob/71b4ed218754cfa86a062e883755549d86aa57b4/include/boost/iostreams/detail/fstream.hpp)]。デフォルトモードは 'in | out'です。 [docs](http://en.cppreference.com/w/cpp/io/basic_filebuf/open)によると、ファイルが存在しないときにエラーが発生します。オープンモードを適切に設定する必要があります。 –