写文件dat文件函数+另存为对话框使用+时间设定函数分析

1. 关于写dat文件的两个方法。
(1)用“<<”写

              “<<”主要用于每次只写入文件单个字符时使用。优点是简单,缺点是效率低(因为每次只能写1个字符)。具体代码如下:

//加入如下头文件
#include <fstream>
#include <iostream>
using namespace std;

//在相关函数中加入如下代码.下列函数是将字符a写入test.dat文件中。
ofstream m_ocout_w;
unsigned char m_char;

m_ocout_w.open("test.dat",ios_base::out| ios_base::binary);//ios_base::out| ios_base::binary表示以二进制方式打开一个输出文

件。

m_char = 'a';

m_ocout_w<<m_char;//将字符a写入文件

m_ocout_w.close();

//完。

(2)用write函数写。(效率高)


             此函数效率高,一次可写任意字节数。具体代码如下:

//加入如下头文件
#include <fstream>
#include <iostream>
using namespace std;

//在相关函数中加入如下代码.下列函数是将字符a写入test.dat文件中。
ofstream m_write;
unsigned char array[255];
for(int i =0;i<255;i++)
{
array[i] = i;
}

m_write.open("test.dat",ios_base::out| ios_base::binary);

m_write.write((char *)array,255);

m_write.close();

//完。
2.关于“另存为”、“打开”对话框的设置。
 

      代码如下 :

CString strFile_read;
TCHAR szFilter_read[] = _T("文本文件(*.dat)|*.dat| 文本文件(*.txt)|*.txt| 所有文件(*.*)|*.*|"); 设置过滤器   
CFileDialog dlg(FALSE,_T(".dat"),_T("test_write.dat"),0,szFilter_read,this);//FALSE表示为“另存为”对话框,TRUE为“打开”对

话框
if(dlg.DoModal() == IDOK)
{
strFile_read = dlg.GetPathName();//获取完整路径
MessageBox(strFile_read );
}
注:
(1)关于 TCHAR szFilter_read[] =_T("文本文件(*.dat)|*.dat| 文本文件(*.txt)|*.txt| 所有文件(*.*)|*.*|")说明:
        

           此句为设置过滤器,即只显示把打开文件夹内我们选择类型的文件。




       图中“保存类型”后的内容即为我们设置的过滤器。由图可知,我们设置了3种类型:“文本文件(*.dat)”、“文本文件(*.txt)”、“所有文件(*.*)”。


      其中以过滤器中第一项为例,代码“文本文件(*.dat)|*.dat|”。其中“文本文件(*.dat)”只是设定了“另存为”对话框中“保存类型”后显示的每一项的内容,并不会对文件夹内文件类型进行筛选显示;“|*.dat|”部分才是过滤器的执行部分,注意勿掉!


      此句“TCHAR szFilter_read[] =_T("文本文件(*.dat)|*.dat| 文本文件(*.txt)|*.txt| 所有文件(*.*)|*.*|")”中,三种类型直接写在一起,不用其他符号区分。如:只显示两项时,代码为:TCHAR szFilter_read[] =_T("文本文件(*.dat)|*.dat| 文本文件(*.txt)|*.txt|") ;只显示一项时,代码为:TCHAR szFilter_read[] =_T("文本文件(*.dat)|*.dat|")。

(2)关于“CFileDialog dlg(FALSE,_T(".dat"),_T("test_write.dat"),0,szFilter_read,this);”句解释。
             

              第一个参数:FALSE-另存为对话框;TRUE-“打开”对话框。
              第二个参数:作用未知。
             第三个参数:默认的“文件名”。
             第五个参数:使用的过滤器。


3.2种获取系统时间函数。

方法一:GetLocalTime函数。


#include <windows.h>//增加头文件。

SYSTEMTIME sys;
GetLocalTime( &sys );//时间放在结构体sys中。

CString cs_time;
cs_time.Format("%d年%d月%d日%d时%d分%d秒%d毫

秒",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds);

方法二:clock函数。(此函数方便计算时间段)


代码如下:

#include <time.h>//clock_t 所需头文件

...
...

clock_t start_time,finish_time;//定义2个变量

...

start_time = clock();//获取开始时间。单位为毫秒。

...
...

finish_time = clock();//获取结束时间。单位为毫秒。

int num_time = finish_time - start_time;//为该时间段的毫秒数。
//或该时间段的秒数,如下:
//int time_mil_sec = (finish_time - start_time)/CLOCKS_PER_SEC;//CLOCKS_PER_SEC为1000。

4. 一个完整程序,功能是两个按钮。一个按钮用“<<”写文件,一个按钮用“write”函数写。代码如下:


//在.h文件中加入以下代码:
#include <fstream>
#include <iostream>
using namespace std;
#include <windows.h>//获取系统时间用
#include <time.h>//clock_t 所需头文件

class CWriteFileTestDlg : public CDialogEx
{
 ......
public:
	afx_msg void OnBnClickedButton_ocout_w();//写的函数一
	afx_msg void OnBnClickedButton_write();//写的函数二
	unsigned char array1[300][2048];//需要被写进文件的数据源。
	int m_ar;
}


//构造函数作用是给array数组赋值。
CWriteFileTestDlg::CWriteFileTestDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CWriteFileTestDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	m_ar = 0;
	for(int i = 0;i<300;i++)
	{
		for (int j=0;j<2048;j++)
		{
			if (m_ar==256)
				m_ar = 0;
			array1[i][j]=m_ar;
			m_ar++;
		}
	}
}

//写数据的函数一
void CWriteFileTestDlg::OnBnClickedButton_ocout_w()
{
	// TODO: 在此添加控件通知处理程序代码
	ofstream ocout_w;
	unsigned char m_char;

	//获取当前时间
	SYSTEMTIME sys;
	GetLocalTime( &sys );
	clock_t start_time,finish_time;
	CString cs_time;
	cs_time.Format("%d年%d月%d日%d时%d分%d秒%d毫秒",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds);
	cs_time+=".dat";

	//另存为对话框,用于读取读取到的文件存放地址。
	TCHAR szFilter_read[] = _T("文本文件(*.dat)|*.dat|所有文件(*.*)|*.*|"); 设置过滤器 
	//CFileDialog dlg(FALSE,_T(".dat"),_T("test.dat"),0,szFilter_read,this);//FALSE表示为“另存为”对话框,TRUE为“打开”对话框
	CFileDialog dlg(FALSE,_T(".dat"),cs_time,0,szFilter_read,this);//FALSE表示为“另存为”对话框,TRUE为“打开”对话框
	CString strFile_read;
	if(dlg.DoModal() == IDOK)

	{
		start_time = clock();
		strFile_read = dlg.GetPathName();//获取完整路径

		ocout_w.open(strFile_read,ios_base::out| ios_base::binary);
		int m_oc = 0;
		int m_num_oc = 0;
		while(m_num_oc<100000000)
		{
			if (m_oc==256)
				m_oc = 0;
			m_char = m_oc;

			ocout_w<<m_char;//写文件函数

			m_oc++;
			m_num_oc++;
		}
		ocout_w.close();
		finish_time = clock();
    }
	

	int time_mil_sec = (finish_time - start_time);	
	CString cs1;
	cs1.Format("毫秒数 = %d",time_mil_sec);
	MessageBox(cs1);

}

//写文件的函数二。
void CWriteFileTestDlg::OnBnClickedButton_write()
{
	// TODO: 在此添加控件通知处理程序代码
	ofstream m_write;

	//另存为对话框,用于读取读取到的文件存放地址。
	TCHAR szFilter_read[] = _T("文本文件(*.dat)|*.dat|所有文件(*.*)|*.*||"); 设置过滤器   
	CFileDialog dlg(FALSE,_T(".dat"),_T("test_write.dat"),0,szFilter_read,this);//FALSE表示为“另存为”对话框,TRUE为“打开”对话框
	CString strFile_read;
	if(dlg.DoModal() == IDOK)

	{
		strFile_read = dlg.GetPathName();//获取完整路径

		m_write.open(strFile_read,ios_base::out| ios_base::binary);
		int m_oc = 0;
		int m_num_oc = 0;
		while(m_num_oc<=921503232)
		{
			if (m_oc==301)
			{
				   m_oc = 0;
			}
			m_write.write((char *)array1[m_oc],2048);
			m_oc++;
			m_num_oc+=2048;
		}
		m_write.close();
	}
	MessageBox("写数据完成!");

}

完。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值