(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("写数据完成!");
}
完。