之前工作用的多的也是对文件的各种操作,读写文件数据、文件拆包、文件分包、文件解析、文件解密、文件数据反馈到界面显示、文件拆分等。所以对文件的操作是十分重要的。
- //打开文件对话框
- CFileDialog dlg(TRUE);
- dlg.m_ofn.lpstrFilter="DAT FILES(*.dat)\0*.dat\0All Files(*.*)\0*.*\0\0";
- if(dlg.DoModal()!=IDOK)
- {
- return;
- }
-
- //打开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()判断是否到了文件结尾**