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

来源:互联网 发布:知乎气功 编辑:程序博客网 时间:2024/06/03 18:39
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("写数据完成!");}

完。

原创粉丝点击