分类: C/C++
2010-12-06 00:23:05
一、我们得看看,在C++中如何打开一个文件:
1、得到打开文件的绝对路径:
MFC中,一般做法如下:
1: char szFilter[] = "文本文件 (*.txt)|*.txt|All Files (*.*)|*.*||";
2: CString filePath("");
3: CFileDialog fileOpenDlg(TRUE, "txt", NULL,OFN_HIDEREADONLY,szFilter);
4: if (fileOpenDlg.DoModal() == IDOK)
5: {
6: VERIFY(filePath = fileOpenDlg.GetPathName());
7: }
8: m_TXTPath=filePath;//得到文件路径
9: UpdateData(false);
在标准C++中,可能只能手动写入(控制台中)
二、打开文件
例如:
CString m_FilePath = fileDlg.GetPathName(); //取得文件路径及文件名
CStdioFile f;
f.Open(m_FilePath,CFile::modeRead);
CString data;
int count=1;//行号
while (f.ReadString(data)) //从文件中读取一行数据,暂存在data变量中
{
if(count==1) //第一行为数值行
{
//将一行中的各个部分存到数组中,%d 表示“十进制数”
sscanf(data,"%d %d %d",&(MyStruct.t_int[0]),&(MyStruct.t_int[1]),&(MyStruct.t_int[2]));
}
else if(count==2)
{
//%lf 表示“双精度浮点数,也就是double”,%f表示“单精度浮点数,float”
sscanf(data,"%lf %lf",&(MyStruct.t_double[0]),&(MyStruct.t_double[1]));
}
else if(count==3)
{
memset(MyStruct.t_ch_1,'\0',10); //初始化数组,并赋值为'\0'
memset(MyStruct.t_ch_2,'\0',10);
//将分隔开的字符串 存到字符数组中
sscanf(data,"%s%s",&(MyStruct.t_ch_1),&(MyStruct.t_ch_2));
}
count++;
}
GetDlgItem(IDC_STATIC)->SetWindowText(_T(MyStruct.t_ch_1));//得到第三行数据中的第一项 作为测试
说明:
如果文件不是很大的话,用CStdioFile类比较好;若文件很大,如100M左右的txt,则得考虑其他的方法。
sscanf函数的用法: sscanf(源字符串数据,转换格式,转换后的数据……)--->目的是将字符串按“空格”解析出来
,分别存贮。
与之差不多的是sprintf函数: sprintf(目的字符串数据,转换格式,要转换的数据……)---->目的是把单个的数据
按照转换格式变成一个字符串
测试数据: 第一行(三个整数);第二行(两个小数);第三行(两个字符串)
源程序:
chinaunix网友2010-12-07 09:53:50
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com