您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

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

时间:09-15来源:作者:点击数:
城东书院 www.cdsy.xyz

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

打开文件对话框
//打开文件对话框
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()判断是否到了文件结尾**

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐