C++:ファイルの書き出し

cplus-filewrite.png

セットアップ

小数を正しく表示したいとき

stringstream.setf(ios::fixed,ios::basefield);

小数点第何位まで?

stringstream.precision(8);//第8位まで[((bibcite label))]

書き込みモード

新規作成

#include <fstream>
ofstream ofs("miffy.txt",ios_base::trunc);

オープンモード


モード 動作 ファイルがあるとき ファイルがないとき
"r" 読み出し専用 正常 エラー(NULL返却)
"w" 書き込み専用 サイズを 0 にする(上書き) 新規作成
"a" 追加書き込み専用 最後に追加する 新規作成
"r+" 読み込みと書き込み 正常 エラー(NULL返却)
"w+" 書き込みと読み込み サイズを 0 にする(上書き) 新規作成
"a+" 読み込みと追加書き込み 最後に追加する 新規作成

バイトデータ

HANDLE handle;
    DWORD dwnumread;
handle = CreateFile(FILENAME.c_str(), GENERIC_WRITE,FILE_SHARE_WRITE, NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL );
    WriteFile(handle,&header.FileType,sizeof(JMeshHeader),&dwnumread,NULL);
    CloseHandle(handle);
任意の一に書き込む場合
File cacheFile=new File("miffy.bin");
RandomAccessFile raFile = new RandomAccessFile(cacheFile, "rw");
byte[] init={'*','*','*','*','*'};
raFile.write(init,0,init.length);
byte[] data={'a','b','c','d','e'};
raFile.seek(2);
raFile.write(data, 1,1);
raFile.close();

結果こうなります
**b**de

つまり、RandomAccessFileのwrite(data,offset,size)
のoffsetは書き込む元のdataのオフセット位置という意味です。
ファイルのどこから書き始めるかはseekで指定します
[[/tab]]

テキストデータ

#include <fstream>
using namespace std;
 
void main(){
ofstream ofs;
ofs.open("miffy.txt",ios_base::trunc);
ofs<<num<<","<<endl;
ofs.close();
}

エラー

要求された操作に対して与えられたバッファーが無効です。

WriteFileの書き込むバイト数がおかしい時にこうなる。
bih.biSizeImageを指定したらエラーになった。×32ビットすると多すぎる。


filewrite

サポートサイト Wikidot.com filewrite