2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

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

时间:09-15来源:作者:点击数:28
城东书院 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
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐