2016-08-21 18 views
-2

この値をファイルに正しく書き込む方法がわかりません。私はインターネットに関する少しの研究を行い、この記事を見つけました。私は記事から理解何ifstreamバイナリ読み取り/書き込みのみがchar *を取る?

http://www.eecs.umich.edu/courses/eecs380/HANDOUTS/cppBinaryFileIO-2.html

#include <fstream> 
#include <iostream> 

int main() 
{ 
    int testVar = 71; 
    std::ofstream outputFile; 
    outputFile.open("C:/binary.dat", std::ios::out | std::ios::binary); 
    outputFile.seekg(0); 
    outputFile.write(&testVar, sizeof(testVar)); 
    outputFile.close(); 
} 

は、最初のパラメータがvoidポインタであるということですか?それはどんなタイプでも受け入れることを意味しますか?しかし、私がそれを打ち込んでいるとき、intelisenseは、過負荷がなく、最初のパラメータがchar *型を取ると言います。

古いC++バージョンの間違ったヘッダーなどを使用していますか?

実際にここでいくつかのヘルプを使用できますか? ありがとう!

+0

私は実際に何を求めているのか分からない。 –

+0

これはoutputFile.write()のパラメータと私が記事から取ったものです。私はバイナリ出力を使用してファイルに整数を書きたいと考えています。 –

+3

ドキュメントと例はhttp://en.cppreference.com/w/cpp/io/basic_ostream/writeにあります。 – Loreto

答えて

0

私は、機能の開発の歴史に精通していません。したがって、引数がなぜchar*で、でないのかについてはコメントできません。あなたの問題を解決するために

...

あなたは使用することができます。

outputFile.write(reinterpret_cast<char*>(&testVar), sizeof(testVar)); 

使用reinterpret_castistream::read()を使用しています。

0

あなたは実際にそれをchar *にキャストする必要がありますが、以前は言われましたが、コードには他の問題があります。 seekg()は入力ストリーム用で、出力ファイルを作成しています。行を消去する場合は、ファイルをtruncで開きます。

#include <fstream> 
#include <iostream> 

int main() 
{ 
    int testVar = 71; 
    std::ofstream outputFile("C:/binary.dat", std::ios::out | std::ios::binary | std::ios::trunc); 
    outputFile.write((char*)&testVar, sizeof(testVar)); 
    outputFile.close(); 
} 
0

最初のパラメータはchar*です。 charのサイズが1バイトの場合はchar*がデータブロックを示します。

生のバイナリデータを書き込むとき、データはchar*とブロックのサイズとして渡されます。

古いC++バージョンの間違ったヘッダーなどを使用していますか?

はありません、それはそれは引数として取られchar*なくvoid*で述べたような問題ではありません。

seekg()メンバ関数は入力ストリーム用です。私はあなたが必要としていた機能はseekp()だと思う。

関連する問題