⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 剖析vc中的文件操作 - pcvc_net.htm

📁 VC文件的读写操作(很多)
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)http://www.pcvc.net/category/content.asp?sendid=14 -->
<HTML><HEAD><TITLE>剖析VC中的文件操作 - PCVC.NET</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TD {
	FONT-SIZE: 12px; LINE-HEIGHT: 150%
}
BODY {
	FONT-SIZE: 12px; LINE-HEIGHT: 150%
}
.nav {
	COLOR: #333333; TEXT-DECORATION: none
}
.nav:link {
	COLOR: #000099; TEXT-DECORATION: none
}
.nav:visited {
	COLOR: #000099; TEXT-DECORATION: none
}
.nav:hover {
	COLOR: #ff6600; TEXT-DECORATION: underline
}
.d {
	FONT-WEIGHT: bold
}
</STYLE>

<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY topMargin=0>
<TABLE height=146 cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD width="3%" height=60><IMG src="剖析VC中的文件操作 - PCVC_NET.files/vc_pi1.gif" 
      border=0></TD>
    <TD width="97%" height=60>
      <TABLE height=43 cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD width="100%" height=18>
            <P align=right><A class=nav href="http://www.pcvc.net/"><IMG 
            src="剖析VC中的文件操作 - PCVC_NET.files/home.gif" border=0>首页</A> | <IMG 
            src="剖析VC中的文件操作 - PCVC_NET.files/tg.gif" border=0>投稿</P></TD></TR>
        <TR>
          <TD width="100%" bgColor=#c0c0c0 height=1></TD></TR>
        <TR>
          <TD width="100%" height=18></TD></TR></TBODY></TABLE></TD></TR>
  <TR>
    <TD width="100%" colSpan=2 height=74>
      <P align=center><EMBED src=images/pcvc.swf width=480 
  height=74></P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD width="100%">您的位置:<A class=nav 
      href="http://www.pcvc.net/">PCVC.NET</A> &gt;&gt; <A class=nav 
      href="http://www.pcvc.net/category/sort.asp?cateid1=2">平台/系统</A> &gt;&gt; 
      <A class=nav 
      href="http://www.pcvc.net/category/sort.asp?cateid1=2&amp;cateid2=24">文件操作</A> 
      &gt;&gt; 正文 </TD></TR>
  <TR>
    <TD width="100%" bgColor=#c0c0c0 height=1></TD></TR></TBODY></TABLE>
<TABLE height=1 cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD width="100%" height=16> </TD></TR>
  <TR>
    <TD align=middle width="100%" height=1>
      <TABLE height=1 cellSpacing=0 cellPadding=0 width="91%" border=0>
        <TBODY>
        <TR>
          <TD style="FONT-SIZE: 20px" width="100%">
            <P align=center><FONT face=新宋体><B><FONT 
            style="FONT-SIZE: 18pt">剖析VC中的文件操作</FONT></B></FONT></P></TD></TR>
        <TR>
          <TD style="FONT-SIZE: 12px" align=middle width="100%" 
            height=40>2002-8-4 17:33:29&nbsp;&nbsp; 燕山大学&nbsp;&nbsp; 
            聂栋栋&nbsp;&nbsp; 阅读次数:&nbsp;9176</TD></TR>
        <TR>
          <TD style="FONT-SIZE: 14px" 
            width="100%">各种关于文件的操作在程序设计中十分常见,如果能对这些操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而可以在较短的时间内编写出高效的代码。本文对Visual&nbsp;C++中有关文件操作进行了全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行了详细分析。&nbsp;</FONT><BR></FONT><BR>1.&nbsp;文件的查找&nbsp;</FONT><BR></FONT><BR>当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类“CFileFind”,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。&nbsp;</FONT><BR></FONT><BR>CString&nbsp;strFileTitle;&nbsp;</FONT><BR></FONT><BR>CFileFind&nbsp;finder;&nbsp;</FONT><BR></FONT><BR>BOOL&nbsp;bWorking&nbsp;=&nbsp;finder.FindFile("C:\\windows\\sysbkup\\*.cab");&nbsp;</FONT><BR></FONT><BR>while(bWorking)&nbsp;</FONT><BR></FONT><BR>{&nbsp;</FONT><BR></FONT><BR>bWorking=finder.FindNextFile();&nbsp;</FONT><BR></FONT><BR>strFileTitle=finder.GetFileTitle();&nbsp;</FONT><BR></FONT><BR>}&nbsp;</FONT><BR></FONT><BR>2.&nbsp;文件的打开/保存对话框&nbsp;</FONT><BR></FONT><BR>让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。MFC的类“CFileDialog”用于实现这种功能。使用“CFileDialog”声明一个对象时,第一个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。&nbsp;</FONT><BR></FONT><BR>在构造“CFileDialog”对象时,如果在参数中指定了“OFN_ALLOWMULTISELECT”风格,则在此对话框中可以进行多选操作。此时要重点注意为此“CFileDialog”对象的“m_ofn.lpstrFile”分配一块内存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的内存过小就会导致操作失败。下面这段程序演示了文件打开对话框的使用方法。&nbsp;</FONT><BR></FONT><BR>CFileDialog&nbsp;mFileDlg(TRUE,&nbsp;NULL,NULL,&nbsp;OFN_HIDEREADONLY&nbsp;|&nbsp;OFN_OVERWRITEPROMPT&nbsp;|&nbsp;OFN_ALLOWMULTISELECT,&nbsp;"All&nbsp;Files&nbsp;(*.*)|*.*|&nbsp;|",&nbsp;AfxGetMainWnd());</FONT><BR></FONT><BR>CString&nbsp;str("&nbsp;",&nbsp;10000);&nbsp;</FONT><BR></FONT><BR>mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);&nbsp;</FONT><BR></FONT><BR>str.ReleaseBuffer();&nbsp;</FONT><BR></FONT><BR>POSITION&nbsp;mPos=mFileDlg.GetStartPosition();&nbsp;</FONT><BR></FONT><BR>CString&nbsp;pathName("&nbsp;",&nbsp;128);&nbsp;</FONT><BR></FONT><BR>CFileStatus&nbsp;status;&nbsp;</FONT><BR></FONT><BR>while(mPos!=NULL)&nbsp;</FONT><BR></FONT><BR>{&nbsp;</FONT><BR></FONT><BR>pathName=mFileDlg.GetNextPathName(mPos);&nbsp;</FONT><BR></FONT><BR>CFile::GetStatus(pathName,&nbsp;status);&nbsp;</FONT><BR></FONT><BR>}&nbsp;</FONT><BR></FONT><BR>3.&nbsp;文件的读写&nbsp;</FONT><BR></FONT><BR>文件的读写非常重要,下面将重点进行介绍。文件读写最普通的方法是直接使用“CFile”类进行,如文件的读写可以使用下面的方法:&nbsp;</FONT><BR></FONT><BR>//对文件进行读操作&nbsp;</FONT><BR></FONT><BR>char&nbsp;sRead[2];&nbsp;</FONT><BR></FONT><BR>CFile&nbsp;mFile(_T("user.txt"),CFile::modeRead);&nbsp;</FONT><BR></FONT><BR>if(mFile.GetLength()&lt;2)&nbsp;</FONT><BR></FONT><BR>return;&nbsp;</FONT><BR></FONT><BR>mFile.Read(sRead,2);&nbsp;</FONT><BR></FONT><BR>mFile.Close();&nbsp;</FONT><BR></FONT><BR>//对文件进行写操作&nbsp;</FONT><BR></FONT><BR>CFile&nbsp;mFile(_T("user.txt"),&nbsp;CFile::modeWrite|CFile::modeCreate);&nbsp;</FONT><BR></FONT><BR>mFile.Write(sRead,2);&nbsp;</FONT><BR></FONT><BR>mFile.Flush();&nbsp;</FONT><BR></FONT><BR>mFile.Close();&nbsp;</FONT><BR></FONT><BR>虽然这种方法最为基本,但是它使用烦琐,而且功能非常简单。这里推荐的是使用“CArchive”,它的使用方法简单且功能十分强大。首先还是用“CFile”声明一个对象,然后用这个对象的指针做参数声明一个“CArchive”对象,这样就可以非常方便地存储各种复杂的数据类型了。它的使用方法见下例:&nbsp;</FONT><BR></FONT><BR>//对文件进行写操作&nbsp;</FONT><BR></FONT><BR>CString&nbsp;strTemp;&nbsp;</FONT><BR></FONT><BR>CFile&nbsp;mFile;&nbsp;</FONT><BR></FONT><BR>mFile.Open("d:\\dd\\try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);&nbsp;</FONT><BR></FONT><BR>CArchive&nbsp;ar(&amp;mFile,CArchive::store);&nbsp;</FONT><BR></FONT><BR>ar&lt;&lt;strTemp;&nbsp;</FONT><BR></FONT><BR>ar.Close();&nbsp;</FONT><BR></FONT><BR>mFile.Close();&nbsp;</FONT><BR></FONT><BR>//对文件进行读操作&nbsp;</FONT><BR></FONT><BR>CFile&nbsp;mFile;&nbsp;</FONT><BR></FONT><BR>if(mFile.Open("d:\\dd\\try.TRY",CFile::modeRead)==0)&nbsp;</FONT><BR></FONT><BR>return;&nbsp;</FONT><BR></FONT><BR>CArchive&nbsp;ar(&amp;mFile,CArchive::load);&nbsp;</FONT><BR></FONT><BR>ar&gt;&gt;strTemp;&nbsp;</FONT><BR></FONT><BR>ar.Close();&nbsp;</FONT><BR></FONT><BR>mFile.Close();&nbsp;</FONT><BR></FONT><BR>“CArchive”的“&lt;&lt;”和“&gt;&gt;”操作符用于简单数据类型的读写,对于“CObject”派生类的对象的存取要使用ReadObject()和WriteObject()。使用“CArchive”的ReadClass()和WriteClass()还可以进行类的读写,如:&nbsp;</FONT><BR></FONT><BR>//存储CAboutDlg类&nbsp;</FONT><BR></FONT><BR>ar.WriteClass(RUNTIME_CLASS(CAboutDlg));&nbsp;</FONT><BR></FONT><BR>//读取CAboutDlg类&nbsp;</FONT><BR></FONT><BR>CRuntimeClass*mRunClass=ar.Read&nbsp;</FONT><BR></FONT><BR>Class();&nbsp;</FONT><BR></FONT><BR>//使用CAboutDlg类&nbsp;</FONT><BR></FONT><BR>CObject*&nbsp;pObject=mRunClass-&gt;CreateObject();&nbsp;</FONT><BR></FONT><BR>((CDialog*&nbsp;)pObject)-&gt;DoModal();&nbsp;</FONT><BR></FONT><BR>虽然VC提供的文档/视结构中的文档也可进行这些操作,但是不容易理解、使用和管理,如果要进行的文件操作只是简单的读写整行的字符串,建议使用“CStdioFile”,用它来进行此类操作非常方便,如下例:&nbsp;</FONT><BR></FONT><BR>CStdioFile&nbsp;mFile;&nbsp;</FONT><BR></FONT><BR>CFileException&nbsp;mExcept;&nbsp;</FONT><BR></FONT><BR>mFile.Open(&nbsp;"d:\\temp\\aa.bat",&nbsp;CFile::modeWrite,&nbsp;&amp;mExcept);&nbsp;</FONT><BR></FONT><BR>CString&nbsp;string="I&nbsp;am&nbsp;a&nbsp;string.";&nbsp;</FONT><BR></FONT><BR>mFile.WriteString(string);&nbsp;</FONT><BR></FONT><BR>mFile.Close();&nbsp;</FONT><BR></FONT><BR>4.临时文件的使用&nbsp;</FONT><BR></FONT><BR>正规软件经常用到临时文件,经常可以看到“C:\Windows\Temp”目录下有大量的扩展名为“.tmp”的文件,这些就是程序运行时建立的临时文件。临时文件的使用方法基本与常规文件一样,只是文件名应该调用函数GetTempFileName()获得。它的第一个参数是建立此临时文件的路径,第二个参数是建立临时文件名的前缀,第四个参数用于得到建立的临时文件名。得到此临时文件名以后,就可以用它来建立并操作文件了,如:&nbsp;</FONT><BR></FONT><BR>char&nbsp;szTempPath[_MAX_PATH],szTempfile[_MAX_PATH];&nbsp;</FONT><BR></FONT><BR>GetTempPath(_MAX_PATH,&nbsp;szTempPath);&nbsp;</FONT><BR></FONT><BR>GetTempFileName(szTempPath,_T&nbsp;("my_"),0,szTempfile);&nbsp;</FONT><BR></FONT><BR>CFile&nbsp;m_tempFile(szTempfile,CFile::&nbsp;modeCreate|CFile::&nbsp;modeWrite);&nbsp;</FONT><BR></FONT><BR>char&nbsp;m_char='a';&nbsp;</FONT><BR></FONT><BR>m_tempFile.Write(&amp;m_char,2);&nbsp;</FONT><BR></FONT><BR>m_tempFile.Close();&nbsp;</FONT><BR></FONT><BR>5.文件的复制、删除等&nbsp;</FONT><BR></FONT><BR>MFC中没有提供直接进行这些操作的功能,因而要使用SDK。SDK中的文件相关函数常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它们的用法很简单,可参考MSDN。<BR><BR></TD></TR>
        <TR>
          <TD align=middle width="100%" bgColor=#c0c0c0 height=1></TD></TR>
        <TR>
          <TD style="FONT-SIZE: 14px" align=left width="100%" height=2><BR>
            <TABLE cellSpacing=0 cellPadding=0 width=730 border=0>
              <TBODY>
              <TR bgColor=#ccccc0>
                <TD class=a width=570 
            height=20><B>网友对该文章的评论</B></TD></TR></TBODY></TABLE>
            <TABLE cellSpacing=0 cellPadding=0 width=730 border=0>
              <TBODY>
              <TR>
                <TD style="FONT-SIZE: 14px"><IMG 
                  src="剖析VC中的文件操作 - PCVC_NET.files/doc.gif"> <SPAN class=d>网友: 
                  fanoble(fanoble@yeah.net)&nbsp;发表于: 2003-9-28 
                  17:36:19</SPAN><BR><BR>那个CFileDialog怎么不好用</FONT><BR>按上面的方法打开多个文件时</FONT><BR>最多就21个</FONT><BR>再多了就一个也没有了 
                </TD></TR>
              <TR bgColor=#ccccc0>
                <TD height=1></TD></TD>
              <TR>
                <TD style="FONT-SIZE: 14px"><IMG 
                  src="剖析VC中的文件操作 - PCVC_NET.files/doc.gif"> <SPAN class=d>网友: 
                  dd(dd)&nbsp;发表于: 2003-7-10 15:44:56</SPAN><BR><BR>dddddd 
</TD></TR>
              <TR bgColor=#ccccc0>
                <TD height=1></TD></TD>
              <TR>
                <TD style="FONT-SIZE: 14px"><IMG 
                  src="剖析VC中的文件操作 - PCVC_NET.files/doc.gif"> <SPAN class=d>网友: 
                  qq(qxy163fqxy@163.com)&nbsp;发表于: 2003-5-31 
                  14:53:03</SPAN><BR><BR>你的文章很好,对我很有帮助! </TD></TR>
              <TR bgColor=#ccccc0>
                <TD height=1></TD></TD>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -