对文件的操作(打开、判断文件是否存在等)

之前工作用的多的也是对文件的各种操作,读写文件数据、文件拆包、文件分包、文件解析、文件解密、文件数据反馈到界面显示、文件拆分等。所以对文件的操作是十分重要的。

打开文件对话框

//打开文件对话框
CFileDialog dlg(TRUE);
dlg.m_ofn.lpstrFilter="DAT FILES(*.dat)\0*.dat\0All Files(*.*)\0*.*\0\0";
if(dlg.DoModal()!=IDOK)
{
	return;
}

打开Excel文件具体操作

//打开Excel文件
CFileDialog dlg(TRUE,NULL,NULL,0,"Excel Files(*.xlsx)|*.xlsx||");
if(IDOK!=dlg.DoModal())
	return;
CString path=dlg.GetPathName();
CMyExcel fzExcel;
if(!fzExcel.Open(path))
{
	AfxMessageBox("无法打开Excel!",MB_OK,-1);
	return;
}
if(fzExcel.OpenSheet("Sheet1")==FALSE)
{
	AfxMessageBox("无法打开有效的Sheet!",MB_OK,-1);
}

判断文件是否存在

//判断文件是否存在 存在则打开 不存在则创建
CString path;
//path = _T("D:\data\\重点信号库.dat");//指定路径文件夹和定义文件名
path = _T("D:\\重点信号库.dat");//直接在d盘下创建重点目标库的文件
CFile data_file;
if (PathFileExists(path))//判断路径下文件是否存在
{
	if (!data_file.Open(path, CFile::modeWrite | CFile::typeBinary))//存在则打开
	{
		AfxMessageBox("文件正在被使用无法打开!!");
		return;
	}
}
else
{
	//不存在则创建   modecreate 会清空内容
	if (!data_file.Open(path, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
	{
		AfxMessageBox("文件创建失败或者正在被使用无法打开!!");
		return;
	}
}
data_file.SeekToEnd();//将光标定在文件最后 方便写入

在指定的路径下创建文件

//指定路径必须有两个右斜线
CString path;
path = _T("D:\\书籍\\P8面试题\\重点信号库.dat");

获取文件的后缀

//获取文件的后缀
CFileDialog dlg(TRUE,".dat",NULL,OFN_HIDEREADONLY|OFN_LONGNAMES,_T("ALL Files(*.*)|*.*||"));
if(dlg.DoModal()!=IDOK)
{
	return;
}
CString fileExtnames=dlg.GetFileExt();//获取文件后缀函数

保存文件到指定路径下

//保存文件到指定路径
CFile file;
CString filepath;
CString m_txtName = "DATA";
TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|侦察任务(*.hxt)|*.hxt|所有文件(*.*)|*.*||");
CFileDialog fileDlg(FALSE, _T("txt"), m_txtName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);
int Data[10] = { 1,2,3,4,5,6,7,8,9,10 };
if (IDOK == fileDlg.DoModal()) 
{
	filepath = fileDlg.GetPathName();//获取路径名
	if(!file.Open(filepath,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary))
	{
		return;
	}
}

打开文件夹路径

在这里插入图片描述

char szFolder[MAX_PATH] = { 0 };//存放文件夹路径
	BROWSEINFO bi = { 0 };
	bi.lpszTitle = "Select a folder";
	LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
	if (pidl != NULL)
	{
		SHGetPathFromIDList(pidl, szFolder);
		CoTaskMemFree(pidl);
	}

同时打开多个文件

	CString g_ExePath;//这个是新软件的路径
	g_ExePath += "\\ParamConfig\\";

	// TODO: 在此添加控件通知处理程序代码
	CFileDialog dlg(TRUE);
	dlg.m_ofn.lpstrFilter = "INI FILES(*.ini)\0*.ini\0All Files(*.*)\0*.*\0\0";
	dlg.m_ofn.lpstrTitle = "打开INI文件";
	dlg.m_ofn.Flags |= OFN_ALLOWMULTISELECT;//允许选择多个文件

	dlg.m_ofn.nMaxFile = 10 * 5000;//最多打开10个文件 每个文件字符数不超过5000
	char fileNameBuff[10 * 5000] = { 0 };//初始化  里面存放的是文件路径
	dlg.m_ofn.lpstrFile = fileNameBuff;//设定一个文件名缓存

	CStringArray strArrFilePaths;//将文件路径保存在array中

	if (dlg.DoModal() != IDOK)
		return;

	POSITION pos = dlg.GetStartPosition();//获取第一个文件的位置
	while (pos != NULL)
	{
		strArrFilePaths.Add(dlg.GetNextPathName(pos));
	}
	int fileCount = strArrFilePaths.GetSize();//文件的个数

	CString fileName = dlg.GetFileName();

flush()函数 file.flush() 把缓存区的数据强行输出,主要用在IO中 清空缓存区数据 一般在读写流的时候 应该在关闭读写流之前用flush() 防止数据流失 进行实际内容读写时 调用open()打开文件 读写结束后
需要调用close()关闭文件 flush()冲刷缓存区 pos()获取文件读写位置 seek()设置文件读写位置
atend()判断是否到了文件结尾**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Minuw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值