ofstream文件输出流把二进制数据写入文件

1、添加头文件

#include <fstream>
#include <sstream>

using namespace std;


 

2、执行文件打开写入关闭操作

//在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,
//就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定

//ofstream         //文件写操作 内存写入存储设备   
//ifstream         //文件读操作,存储设备读区到内存中  
//fstream          //读写操作,对打开的文件可进行读写操作

//(一)打开文件的方式在ios类(所以流式I/O的基类)中定义,有如下几种方式:
//ios::in	为输入(读)而打开文件
//ios::out	为输出(写)而打开文件
//ios::ate	初始位置:文件尾
//ios::app	所有输出附加在文件末尾
//ios::trunc	如果文件已存在则先删除该文件
//ios::_Nocreate 不建立文件,所以文件不存在时打开失败
//ios::_Noreplace 不覆盖文件,所以打开文件时如果文件存在失败
//ios::binary	二进制方式 这些方式是能够进行组合使用的,以“或”运算(“|”)的方式:例如

//(二)、保护模式
//#define _SH_DENYRW      0x10    /* deny read/write mode */拒绝对文件进行读写 
//#define _SH_DENYWR      0x20    /* deny write mode */拒绝写入文件 
//#define _SH_DENYRD      0x30    /* deny read mode */拒绝文件的读取权限 
//#define _SH_DENYNO      0x40    /* deny none mode */读取和写入许可 
//#define _SH_SECURE      0x80    /* secure mode */共享读取,独占写入 
//注意:假设A进程以_SH_DENYRW 打开,那么是B进程不能再对文件进行读写。

ofstream ofs;							//打开文件用于写,若文件不存在就创建它

locale loc = locale::global(locale("")); 		       //要打开的文件路径含中文,设置全局locale为本地环境 

ofs.open("./out.bin",ios::out| ios::app | ios::binary,_SH_DENYNO); //输出到文件 ,追加的方式,二进制。 可同时用其他的工具打开此文件

locale::global(loc);					      //恢复全局locale

if (!ofs.is_open())return;	//打开文件失败则结束运行  

for (int i=0;i<100;i++)
{
	char* buffer = "fdsfdsfdsfdsfdsfds\n";
	ofs.write(buffer, sizeof(char)*17); 
	ofs.flush();
	Sleep(1000);
}

ofs.close();  


 
ofstream  file;
locale::global(locale(""));//将全局区域设为操作系统默认区域
string strFileName = "e:\\abc.bin";
file.open(strFileName.c_str());
locale::global(locale("C"));// 还原全局区域设定 

std::ostringstream   str("");
str	<<	"123" << "\n";
file.write(str.str().c_str(),str.str().length());
file.close();



3、执行文件打开读取关闭操作

        //读文件
        ifstream ifs;							//打开文件用于写,若文件不存在就创建它

        locale loc = locale::global(locale("")); //要打开的文件路径含中文,设置全局locale为本地环境
        ifs.open(m_fullPathName, ios::in | ios::binary, _SH_DENYNO); //二进制, 可同时用其他的工具打开此文件
        locale::global(loc);

        if (!ifs.is_open())
        {
            //打开文件失败则结束运行
            return;
        }

        char *IQDataBuf = new char[8192 * 2 * 2];   //8192个I 8192个Q  ,一个I或者Q占2字节
        memset(IQDataBuf, 0, 8192 * 2 * 2);
        int numBytes;
        while (!ifs.eof())//使用eof()函数检测文件是否读结束
        {
            //每次读取8192*2*2,循环读取直至读取完整个二进制文件
            ifs.read(IQDataBuf, 8192 * 2 * 2);
            numBytes = ifs.gcount();//使用gcount()获得实际读取的字节数
        }

        if (IQDataBuf)
        {
            delete[] IQDataBuf;
            IQDataBuf = NULL;
        }

        ifs.close();
    }

 

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值