之前工作用的多的也是对文件的各种操作,读写文件数据、文件拆包、文件分包、文件解析、文件解密、文件数据反馈到界面显示、文件拆分等。所以对文件的操作是十分重要的。
//打开文件对话框
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()判断是否到了文件结尾**