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

}

完。

### 回答1: dat文件是一种数据文件,而mat文件是一种用于存储矩阵数据和多维数组的文件格式。为了将dat文件转换为mat文件,我们可以使用已经封装好的函数,这个函数可以批量转换多个dat文件。 首先,我们需要准备好所有需要转换的dat文件,确保它们都在同一个文件夹中。 接下来,我们可以打开Matlab软件,并在命令窗口中调用已封装的函数函数可能有一个输入参数,用于指定dat文件所在的文件夹路径。 函数将会遍历文件夹中的所有dat文件,并将它们逐个转换为mat文件。在转换过程中,新生成的mat文件将与原始dat文件保存在同一个文件夹中。 一旦转换完成,我们就可以在文件夹中找到所有的mat文件,它们包含了原始dat文件中的数据。这些mat文件可以通过Matlab加载和使用,方便后续的数据分析和处理。 总而言之,通过使用已封装的函数,我们可以批量将dat文件转换为mat文件,以便在Matlab中方便地使用和操作这些数据。 ### 回答2: dat文件是一种用于存储二进制数据的文件格式,而mat文件是一种用于存储MATLAB数据的文件格式。如果要将dat文件转换为mat文件,可以使用已封装的函数来实现批量转换。 首先,需要明确dat文件和mat文件的数据格式。dat文件中的数据可以是任意类型的二进制数据,而mat文件中的数据需要按照MATLAB的数据格式进行存储,例如矩阵、向量、结构体等。 接下来,可以编一个函数来完成dat文件转mat文件的操作。这个函数可以接受一个或多个dat文件的路径作为输入,并将它们转换为相应的mat文件函数的流程可以包括以下几个步骤: 1. 遍历输入的dat文件路径,依次读取每个dat文件的内容。 2. 将读取的二进制数据进行解析,得到相应的MATLAB数据结构。 3. 创建一个新的mat文件,并将解析后的数据写入文件。 4. 继续处理下一个dat文件,直到所有的dat文件都转换完成。 在函数实现时,可以利用MATLAB自带的函数来进行dat文件的读和mat文件的创建。例如,可以使用fread函数来读取dat文件的二进制数据,使用save函数来将数据保存为mat文件。 最后,使用函数可以批量转换多个dat文件为mat文件。只需要将需要转换的dat文件的路径传递给这个函数,即可实现自动转换。 通过这种方式,我们可以快速、方便地将dat文件转换为mat文件,便于在MATLAB环境中进行后续的数据处理和分析。 ### 回答3: 使用已封装的函数批量将dat文件转为mat文件非常方便。dat文件是一种二进制数据格式,无法直接打开和读取,而mat文件是Matlab的数据格式,可以直接在Matlab中使用。将dat文件转为mat文件可以将数据转化为Matlab可以处理的形式,方便进行各种数据分析和处理。 首先,打开Matlab软件,并将已封装的函数导入Matlab环境。此函数能够将dat文件转为mat文件,并且支持批量转换,节省了时间和精力。函数的具体使用方法可以参考函数的说明文档或者函数本身的注释。 接下来,将待转换的dat文件放置在一个文件夹中,可以是单个dat文件,也可以是多个文件。确保文件夹中只包含待转换的dat文件,而不包含其他文件。 然后,调用已封装的函数,指定待转换的dat文件所在的文件夹路径作为函数的输入参数。运行函数后,程序将会自动读取文件夹中的所有dat文件并逐个转换为mat文件。转换后的mat文件会保存在与dat文件相同的文件夹中,以相同的文件名保存,只是后缀名由".dat"改为".mat"。 在转换过程中,可以根据需要查看转换的进度。转换完成后,可以在Matlab中打开转换后的mat文件,对数据进行进一步处理和分析。在Matlab中,可以使用各种内置函数和工具箱对数据进行可视化、统计、计算等操作。 总结起来,通过使用已封装的函数,可以方便地将dat文件批量转换为mat文件。这样可以将数据转化为Matlab可以处理的形式,方便进行进一步的数据分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值