您的位置:首页 > 编程语言 > C语言/C++

c++文件常见操作示例

2007-06-01 16:00 405 查看
[align=center]C++常见文件操作示例[/align]
1. 复制文件:
[align=left] UpdateData();[/align]
[align=left] //提示用户是否复制文件[/align]
[align=left] if (MessageBox("是否将原始文件复制到目标文件?","提示",MB_OKCANCEL)==IDOK)[/align]
[align=left] { CFile *pSrcFile=NULL; CFile *pDstFile=NULL;//定义两个指向原始文件和目标文件的指针[/align]
[align=left] TRY[/align]
[align=left] { pSrcFile=new CFile(m_szSrcFile, CFile::modeRead); //原始文件赋值给指针[/align]
[align=left] pDstFile=new CFile(m_szDrcFile, CFile::modeCreate|CFile::modeWrite);//目标文件 int nRead; //读取的字节数[/align]
[align=left] char szBuffer[1024]; //复制缓冲区,用于将读取的数据缓存,然后写入[/align]
[align=left] //循环直到读取的字节数为0[/align]
[align=left] while (nRead=pSrcFile->Read(szBuffer,sizeof(szBuffer)))[/align]
[align=left] { pDstFile->Write(szBuffer,nRead); }[/align]
[align=left] pSrcFile->Close(); pDstFile->Close();//关闭文件指针[/align]
[align=left] delete pSrcFile; delete pDstFile;//删除,否则内存泄漏[/align]
[align=left] MessageBox("文件复制成功。","提示",MB_OK); //提示复制成功[/align]
[align=left] }[/align]
[align=left] CATCH(CFileException,e)[/align]
[align=left] { MessageBox("文件复制失败。","提示",MB_OK); //出错,提示复制失败[/align]
[align=left] if (pSrcFile!=NULL)[/align]
[align=left] { pSrcFile->Abort(); delete pSrcFile; //安全关闭原始文件[/align]
[align=left] }[/align]
[align=left] if (pDstFile!=NULL)[/align]
[align=left] { pDstFile->Abort(); delete pDstFile;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] END_CATCH[/align]
}
2. 剪切文件内容(从A文件把内容剪切到B文件,并删除A文件,AB两文件类型相同)
[align=left] UpdateData();[/align]
[align=left] //提示用户是否移动文件[/align]
[align=left] if (MessageBox("是否将原始文件移动到目标文件?","提示",MB_OKCANCEL)==IDOK)[/align]
[align=left] { CFile *pSrcFile=NULL; CFile *pDstFile=NULL;[/align]
[align=left] TRY[/align]
[align=left] { pSrcFile=new CFile(m_szSrcFile, CFile::modeRead); //原始文件[/align]
[align=left] pDstFile=new CFile(m_szDrcFile, CFile::modeCreate|CFile::modeWrite);//目标文件[/align]
[align=left] int nRead; //读取的字节数[/align]
[align=left] char szBuffer[1024]; //复制缓冲区,用于将读取的数据缓存,然后写入[/align]
[align=left] //循环直到读取的字节数为0[/align]
[align=left] while (nRead=pSrcFile->Read(szBuffer,sizeof(szBuffer)))[/align]
[align=left] { pDstFile->Write(szBuffer,nRead);[/align]
[align=left] }[/align]
[align=left] pSrcFile->Close(); pDstFile->Close();[/align]
[align=left] delete pSrcFile; delete pDstFile;[/align]
[align=left] CFile::Remove(m_szSrcFile); //删除原文件[/align]
[align=left] MessageBox("文件移动成功。","提示",MB_OK); //提示移动成功[/align]
[align=left] }[/align]
[align=left] CATCH(CFileException,e)[/align]
[align=left] { MessageBox("文件移动失败。","提示",MB_OK); //出错,提示移动失败[/align]
[align=left] if (pSrcFile!=NULL)[/align]
[align=left] { pSrcFile->Abort(); delete pSrcFile;[/align]
[align=left] }[/align]
[align=left] if (pDstFile!=NULL)[/align]
[align=left] { pDstFile->Abort(); delete pDstFile;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] END_CATCH[/align]
}
3. 删除文件(CFile::Remove(m_szSrcFile)见上例)
4. 创建文件
[align=left]TRY[/align]
[align=left] { //creatfilename.txt为所要创建的文件[/align]
[align=left]CFile file=new CFile("creatfilename.txt",CFile::modeCreate|CFile::modeWrite);[/align]
[align=left] AfxMessageBox("creatfilename.txt文件创建成功",MB_OK);[/align]
[align=left] }[/align]
[align=left] CATCH(CFileException,e)[/align]
[align=left] { TRACE("Error=%u",e->m_cause); }[/align]
[align=left] END_CATCH[/align]
[align=left] }[/align]
5. 读取文件
[align=left] iniDir=strPath;//文件路径:如C:D/test.txt[/align]
[align=left] CStdioFile iniConfigFile;[/align]
[align=left] if(iniConfigFile.m_pStream=fopen(iniDir,"r+w"))//打开文件[/align]
[align=left] { int pass[3]={0};//每班合格人数 int total[3]={0};//每班总人数[/align]
[align=left] while(!feof(iniConfigFile.m_pStream))//判断文件是否是末尾[/align]
[align=left] { char buf[1024];//定义缓冲数组存储读取的值[/align]
[align=left] LPTSTR temp=iniConfigFile.ReadString(buf,1024);//读第一行并将值存储到缓冲数组[/align]
[align=left] CString strSrc = temp;//将指向第一行的指针赋值给strSrc[/align]
[align=left] //去掉该行的左右两端空格,回车符,跳格符[/align]
[align=left] strSrc.TrimLeft(" "); strSrc.TrimRight(" ");[/align]
[align=left] strSrc.TrimRight(" "); strSrc.TrimRight(" ");[/align]
[align=left] strSrc.TrimRight("/t"); strSrc.TrimRight("/n ");[/align]
[align=left] int pos;//该行分隔符的位置[/align]
[align=left] //可以用for语句改写[/align]
[align=left] CString studentInfo[5];//用来存储第一行的以逗号做为分隔符的值[/align]
[align=left] for(int i=0;i<4;i++)[/align]
[align=left] { pos=strSrc.FindOneOf(",");[/align]
[align=left] studentInfo[i]=strSrc.Left(pos);[/align]
[align=left] strSrc=strSrc.Right(strSrc.GetLength()-pos-1);[/align]
[align=left] }[/align]
[align=left] studentInfo[4]=strSrc;[/align]
[align=left]//以下是对读取到的数据进行处理,好写在数据库中,不是本处的重点,详细代码,参考DataTODataBase的源码[/align]
[align=left]//以下三行代码是将CString类型转换为整型的代码[/align]
[align=left] char * pchar2=studentInfo[4].GetBuffer(studentInfo[4].GetLength());[/align]
[align=left] int iscore=atoi(pchar2);[/align]
[align=left] if(iscore>=60) pass[0]++;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]else[/align]
[align=left] {[/align]
[align=left] CString err;[/align]
[align=left] err.Format("找不到文件:%S /n",iniDir);[/align]
[align=left] AfxMessageBox(err,MB_ICONSTOP);[/align]
[align=left] }[/align]
[align=left] iniConfigFile.Close();[/align]
[align=left] //为了避免重复转换最好导入后将原始数据删除[/align]
remove(iniDir);
6. 写文件
[align=left] CString classid[3]={"class1","class2","class3"};[/align]
[align=left] float yield[3]={0.0};//班级合格率[/align]
[align=left] for(int i=0;i<3;i++)[/align]
[align=left] { yield[i]=float(pass[i])/float(total[i]);[/align]
[align=left] WriteTotalToDataBase(classid[i],total[i],pass[i],yield[i]);[/align]
[align=left]//该函数是将每个班的总信息写入到classTotal表中[/align]
[align=left] }[/align]
[align=left] //用C语言写入到classTotal.txt中,[/align]
[align=left] string filename="classTotal.txt";[/align]
[align=left] FILE * fh;[/align]
[align=left] fh = fopen(filename.c_str(), "wb");[/align]
[align=left] if(fh == NULL) { AfxMessageBox("被写入的文件打开失败",MB_OK); }[/align]
[align=left] CString total_str[3],pass_str[3],yield_str[3];[/align]
[align=left] for(int i=0;i<3;i++)[/align]
[align=left] { //以下三句是把int型转化为CString型[/align]
[align=left]total_str[i].Format("%d",total[i]); pass_str[i].Format("%d",pass[i]);[/align]
[align=left] yield_str[i].Format("%f",yield[i]);[/align]
[align=left] }[/align]
[align=left] for(int i=0;i<3;i++)[/align]
[align=left] {//定义以个string类型用来连接以上信息值[/align]
[align=left]string filecontents=classid[i] + "," +total_str[i] + "," +pass_str[i] + "," +yield_str[i]+ "/t";[/align]
[align=left] fprintf(fh,filecontents.c_str());//将信息写入fh[/align]
[align=left] }[/align]
[align=left] AfxMessageBox("数据成功写入classTotal.txt",MB_OK);[/align]
[align=left] if(fclose(fh) != 0) [/align]
[align=left] { AfxMessageBox("被写入的文件关闭失败",MB_OK); }[/align]
[align=left] //用C++语言写入到classTotal1.txt中[/align]
[align=left] CStdioFile mFile; [/align]
[align=left] CFileException mExcept; [/align]
[align=left] mFile.Open( "classTotal1.txt", CFile::modeWrite, &mExcept);[/align]
[align=left] CString filecontents1;[/align]
[align=left] for(int i=0;i<3;i++)[/align]
[align=left] {[/align]
[align=left] filecontents1=classid[i] + "," +total_str[i] + "," +pass_str[i] + "," +yield_str[i]+ "/n"; [/align]
[align=left] mFile.WriteString(filecontents1); [/align]
[align=left] }[/align]
[align=left] AfxMessageBox("数据成功写入classTotal1.txt",MB_OK);[/align]
mFile.Close();
7. 待续……..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: