基于MFC对话框程序实现文件的打开、读取、写入操作
这是在对话框程序的pointscloud622Dlg.cpp文件中,开头应该包含这些头文件
#include "stdafx.h"
#include<iostream>
#include "pointscloud622.h"
#include "pointscloud622Dlg.h"
#include "afxdialogex.h"
#include<vector>
using namespace std;
文件路径只识别正斜杠比如_T("H:/out/ys.txt"),不能识别系统窗口使用的反斜杠比如_T("H:\out\ys.txt")哦!
下面直接看打开按钮的响应函数:
void Cpointscloud622Dlg::OnBnClickedButton1()//点击打开文件
{
TCHAR szFilter[] = _T("点云文件(*.ply;*.pcd)||RBS_APP 文件 (.rbs_app)||文本文件(*.txt)||所有文件(*.*)||");//设置过滤器,双竖线结尾,单竖线隔开;
例如:有两个过滤规则,一个是图片文件:*.bmp或者*.jpg;另一个是所有文件:*.*。则过滤规则为:
" 图片文件 |*.jpg;*.bmp | 所有文件 | *.* ||"
CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szFilter, this); // 构造打开文件对话框,第一个参数为false表示构造另存为对话框
if (IDOK == fileDlg.DoModal()) // 显示打开文件对话框
{
SetDlgItemText(IDC_EDIT1, fileDlg.GetPathName());//将地址输入到对话框界面的第一个编辑框中
CStdioFile file;//实例化一个文件对象用于读取信息
file.Open(fileDlg.GetPathName(), CFile::modeReadWrite);//打开上面的路径,读到我们想要了解的那个文件
CString temp;//用于存放每行读取的内容
//const char *charTemp;//用于存放每行读取的内容,char格式
CString status;//状态栏内容
while (file.ReadString(temp))//下面是对一个具体的点云文件读取操作,以后写代码作为参考即可
{
if (temp.Left(14) == CString("element vertex"))//如果最左边的14个字符是element vertex则停下
{
//string strTemp(CW2A(temp.GetString()));//将CString转化为string
//charTemp =strTemp.c_str();//将string转换为char *
sscanf_s(temp, "element vertex %d", &m_NumPoints);//取出点数
}
if (temp.Left(12) == CString("element face"))//如果最左边的12个字符是element face则停下
{
//string strTemp(CW2A(temp.GetString()));//将CString转化为string
//charTemp = strTemp.c_str();//将string转换为char *
sscanf_s(temp, "element face %d", &m_NumFace);//取出面数
break;//跳出
}
}
status.Format("本文件中共有%d个顶点,%d个单元面", m_NumPoints, m_NumFace);//状态栏
//下面开始写状态栏
RECT m_Rect;
GetClientRect(&m_Rect); //获取对话框的矩形区域
m_Rect.top = m_Rect.bottom - 20; //设置状态栏的矩形区域
m_StatBar->SetText(status, 0, 0);
//SetDefaultNumbers();//设置初始值
file.Close();
}
}
//对于写入,思路是这样:首先拿到要写入的内容,存进一个CString类型的变量中;然后通过交互的方式拿到用户想要存取的位置和文件名;最后在指定路径创建文件并且将内容写入
//一、拿到要写入的内容,存进一个CString类型的变量中
CString outer="This is my first document\nHello world";
//二、通过交互的方式拿到用户想要存取的位置和文件名
TCHAR szFilter[] = _T("MEA 文件 (.mea)||文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||");//设置该对话框的文件过滤器
CFileDialog savefileDlg(FALSE, _T("txt"), strFileTitle, 0, szFilter, this);// 构造存储文件对话框,第三个参数是默认文件名
savefileDlg.m_ofn.lpstrFilter=_T("MEA Files(*.mea)\0*.mea\0RBS Files(*.rbs_app)\0*.rbs_app\0Text Files(*.txt)\0*.txt\0ALL Files(*.*)\0*.*\0\0");
if (IDOK == savefileDlg.DoModal())//打开保存对话框,通过与用户交互来拾取存储路径和文件名、后缀名
{
CString strFilePathSave = savefileDlg.GetPathName();//用于保存完整的存储路径,包括文件名、后缀名
CString str_saveFileTitle = savefileDlg.GetFileName();//保存用户在对话框中输入的文件名和后缀名
}
else
{
return;
}
// strFileTitle=str_saveFileTitle;
//三、在指定路径创建文件并且将内容写入
CStdioFile myoutfile;
myoutfile.Open(strFilePathSave, CFile::modeReadWrite | CFile::modeCreate | CFile::modeNoTruncate);//计算机内部打开上面的路径(如果在该路径下没找到现有文件则创建文件)
myoutfile.WriteString(outer);//开始写入上述
myoutfile.Close();