CFile操作详解
VS2010MFC编程入门之四十五(MFC常用类:CFile文件操作类)

VS2010MFC编程入门之四十五(MFC常用类:CFile文件操作类)上一节中鸡啄米讲了定时器Timer的用法,本节介绍下文件操作类CFile类的使用。
CFile类概述如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作。
这些文件操作函数中有的最终还是调用了操作系统的API函数或者处理过程与之类似,例如在Windows系统中,fread函数就调用了API函数ReadFile。
Windows系统的API函数除了ReadFile,还有CreateFile、WriteFile等函数。
而MFC基于面向对象的思想,将这些Windows API函数封装到了CFile 类中,实现对文件的打开、关闭、读、写、获取文件信息等操作。
使用CFile类对文件进行操作非常便捷。
CFile 类的成员函数CFile( );CFile(HANDLE hFile);CFile(LPCTSTR lpszFileName,UINT nOpenFlags);以上三个成员函数都是CFile的构造函数,用于构造CFile 对象。
参数hFile为要关联到CFile对象的文件的句柄。
参数lpszFileName为要关联到CFile对象的文件的相对路径或者绝对路径;参数nOpenFlags为文件访问选项的组合,通过各选项的按位或运算实现组合,下面的5个表列出了nOpenFlags参数可能取的选项:下面的文件访问模式选项表中只能选择一个进行组合,默认取CFile::modeRead。
取值描述CFile::modeRead 只读方式访问文件CFile::modeWrite 写入方式访问文件CFile::modeReadWrite 读写方式访问文件。
cfile 类 函数

cfile 类函数CFile 类是 C++ 标准库中的一个类,它提供了对文件进行读取和写入的操作。
CFile 类位于头文件 <cfile> 中。
以下是 CFile 类的一些常用函数:1.CFile():构造函数,创建一个 CFile 对象。
2.~CFile():析构函数,释放与文件相关的资源。
3.Open(const char* filename, int nOpenFlags, int nMode):打开文件,并返回一个指向该文件的指针。
参数 filename 是文件名,nOpenFlags 是打开文件的标志位,nMode 是文件的访问模式。
4.Close():关闭文件。
5.Read(void* lpBuf, unsigned int nCount):从文件中读取数据到缓冲区 lpBuf 中,最多读取 nCount 个字节。
6.Write(const void* lpBuf, unsigned int nCount):将缓冲区 lpBuf中的数据写入文件,最多写入 nCount 个字节。
7.GetLength():获取文件长度。
8.SetLength(unsigned int dwNewLen):设置文件长度为 dwNewLen。
9.Seek(long int lOffset, int nFrom):移动文件指针到指定位置。
参数lOffset 是偏移量,nFrom 是起始位置的标志位。
10.Flush():清空文件缓存,将缓冲区中的数据立即写入磁盘。
11.IsEOF():判断文件是否到达文件结尾。
12.IsError():判断文件操作是否出现错误。
这些函数可以用于文件的读取、写入、定位、长度设置等操作。
需要注意的是,在使用 CFile 类进行文件操作时,需要确保文件存在且可访问,同时要注意文件的打开模式和访问模式,以确保操作正确无误。
cfile的open函数 -回复

cfile的open函数-回复C++中,cfile的open函数用于打开文件。
它提供了一种简单的方法来读取和写入文件,以及对文件进行其他操作。
在本文中,我们将一步一步回答有关cfile的open函数的问题。
第一部分:cfile的open函数的基本概念首先,我们需要了解cfile的open函数是什么以及它的基本概念。
cfile 是一个可以用于处理文件的类,它提供了许多与文件相关的操作。
open 函数是cfile类的成员函数之一,用于打开一个文件。
它接受文件名和打开模式作为参数,并返回一个指向文件的指针。
第二部分:参数解释接下来,我们将详细说明open函数的参数。
文件名参数指定要打开的文件的名称和路径。
这可以是文件的相对路径或绝对路径。
打开模式参数指定了打开文件时要使用的模式。
一些常用的打开模式包括输入模式、输出模式和追加模式。
第三部分:打开一个文件现在,我们将演示如何使用cfile的open函数来打开一个文件。
首先,我们需要创建一个cfile对象。
然后,调用open函数并传递文件名和打开模式作为参数。
这将返回一个指向打开文件的指针。
我们可以使用这个指针来进一步操作文件,比如读取或写入数据。
第四部分:文件打开失败的处理在使用open函数时,有时文件打开失败。
这可能是因为文件不存在、权限不足或者磁盘空间不足等原因。
如果open函数无法打开文件,则返回NULL指针。
在这种情况下,我们需要添加适当的错误处理来处理文件打开失败的情况。
第五部分:文件的操作打开文件后,我们可以对文件进行各种操作,如读取和写入数据。
在读取数据时,我们可以使用cfile类的read函数。
这个函数接受一个缓冲区和要读取的字节数作为参数,并返回实际读取的字节数。
在写入数据时,我们可以使用cfile类的write函数。
这个函数接受一个缓冲区和要写入的字节数作为参数,并返回实际写入的字节数。
第六部分:关闭文件当我们完成对文件的操作后,应该关闭文件。
mfc cfile用法

mfc cfile用法
MFC的CFile类是一个用于文件输入输出操作的核心类之一。
它提供了一系列的方法,用于打开、关闭、读取、写入和定位文件内的数据。
首先,我们需要创建一个CFile对象来表示我们想要操作的文件。
可以通过构造函数来实现,例如:
CFile myFile;
然后,我们可以使用Open方法来打开文件。
这个方法需要指定文件名以及打开的模式(如读取、写入、追加等)。
例如:myFile.Open(L"myfile.txt", CFile::modeRead);
读取文件内容可以使用Read方法。
该方法需要指定一个缓冲区和希望读取的字节数。
例如,我们可以创建一个大小为100的字符数组,来读取文件中的数据:
char buffer[100];
myFile.Read(buffer, 100);
写入文件内容可以使用Write方法。
该方法需要指定一个缓冲区和希望写入的字节数。
例如,我们可以将一个字符串写入文件中:char* str = "Hello, world!";
myFile.Write(str, strlen(str));
最后,我们需要关闭文件来释放资源。
可以使用Close方法来实现:
myFile.Close();
除了上述基本的文件操作外,CFile还提供了其他一些有用的方法,比如Seek用于文件指针的定位、GetLength用于获取文件的长度等。
总之,通过使用MFC的CFile类,我们可以方便地进行文件的读写操作。
希望这篇文章能帮助您快速了解和掌握CFile的用法。
CFile

CFileMFC提供了CFile类方便文件的读写,首先要知道,文件的数据读取、数据写入与文件指针的操作都是以字节为单位的,数据的读取和写入都是从文件指针的位置开始的,当打开一个文件的时候,文件指针总是在文件的开头。
常规方法如下:CFile file;file.open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL );//pszFileName是文件名,可包含文件路径,若只有文件名,则默认路径为工程路径,nOpenFlags是文件打开模式,pError是打开失败时用来接收失败信息,一般设置为NULL。
nOpenFlags的常用模式有:CFile::modeCreate 若打开文件不存在,则创建一个新文件,如果该文件存在,则清空它的数据。
CFile::modeNoTruncate 与CFile::modeCreate 组合使用。
如果文件不存在,则创建一个新文件,如果文件存在,则保留他原本的数据。
CFile::modeRead 打开文件用于读取数据。
CFile::modeWrite 打开文件用于写入数据。
CFile::modeReadWrite 打开文件用于读取和写入数据。
CFile::typeBinary 使用二进制文件模式。
此模式仅用于CFile 的派生类。
CFile::typeText 使用文本文件模式。
此模式仅用于CFile的派生类。
CFile默认使用二进制模式读写文件,CFile无法使用文本模式读写文件。
CFile提供了一些常用的操作函数,如表1-2所示。
注意最后两个静态函数,其实它们封装了Windows API中关于文件管理的函数。
使用CFile操作文件的流程如下:构造一个CFile对象。
调用CFile::Open()函数创建、打开指定的文件。
调用CFile::Read()和CFile::Write ()进行文件操作。
vc文件读写使用

CFile和CStdioFile的文件读写使用方法(2009-08-18 10:35:01)标签:杂谈CFile//创建/打开文件CFile file;file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeRead Write);文件打开模式可组合使用,用“|”隔开,常用的有以下几种:CFile::modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容。
CFile::modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。
一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作。
CFile::modeReadWrite:以读写方式打开文件。
CFile::modeRead:只读。
CFile::modeWrite:只写。
//写入数据CString strValue = "Hello World!";file.Write(strValue,strValue.GetLength());//追加数据file.SeekToEnd(); //将指针移至文件末尾进行追加file.Write(strValue,strValue.GetLength());//关闭文件file.Close();CStdioFileCStdioFile是CFile的派生类,对文件进行流式操作,对于文本文件的读写很有用处,可按行读取写入。
//写入数据CString strValue = "Hello World!";file.WriteString(strValue);//读取数据CString strRead;file.ReadString(strRead);当文件存在多行数据需要逐行读取时,可用函数BOOL CStdioFile::ReadString(CString& rString),当遇到"\n "时读取截断,如果文件未读完,返回true,否则返回false。
cfile类的用法

cfile类的用法Cfile类是MFC中的一个文件操作类,它提供了一系列的方法来对文件进行读写操作。
本文将详细介绍Cfile类的用法,包括创建、打开、读取、写入、关闭文件等操作。
一、创建文件在使用Cfile类进行文件操作之前,需要先创建一个文件对象。
可以通过以下方式来创建一个文件对象:CFile file;此时,file对象并没有与任何实际的文件关联。
如果要将其与一个实际的文件关联,需要调用Create方法:BOOL Create(LPCTSTR lpszFileName, UINT nOpenFlags);其中,lpszFileName表示要创建或打开的文件名;nOpenFlags表示打开方式,可以是以下任意一种或多种:1. CFile::modeRead:以只读方式打开文件。
2. CFile::modeWrite:以只写方式打开文件。
3. CFile::modeReadWrite:以读写方式打开文件。
4. CFile::shareDenyNone:不阻止其他进程对该文件进行访问。
5. CFile::shareDenyWrite:阻止其他进程对该文件进行写访问。
6. CFile::shareExclusive:阻止其他进程对该文件进行任何访问。
7. CFile::shareDenyRead:阻止其他进程对该文件进行读访问。
示例代码如下:CFile file;if(file.Create(_T("test.txt"),CFile::modeCreate|CFile::modeWrite)) {// 文件创建成功}else{// 文件创建失败二、打开文件如果要打开一个已经存在的文件,可以使用Open方法:BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);其中,lpszFileName表示要打开的文件名;nOpenFlags表示打开方式,可以是以上所述的任意一种或多种;pError用于接收异常信息。
CFile

CFile::typeBinary 在子类中用于二进制模式
CFile::typeText 在子类中用于文本模式
CFile::shareDenyNone 文件打开时不禁止其它进程写该文件
CFile::shareDenyRead 文件打开时禁止其它进程读该文件
virtual void WriteString( LPCTSTR lpsz );
MFC提供类CException作为用于MFC异常的基础类,例如CFileException
是其用于处理文件异常的派生类。CFileException类提供有关处理文件输入
/输出时的异常信息,可通过检查其成员变量m_cause的值判断文件异常。
CFileException::lockViolation 试图为已加锁区域再加锁
CFileException::diskFull 磁盘满
CFileException::endOfFile 已达文件尾
CFile::modeCreate 建立一个新文件。如果文件存在,则长度截为0
CFile::modeNoTruncate 同CFile::modeCreate,但不将文件长度截为0
CFile::modeRead 以只读方式打开文件
CFile::modeReadWrite 以读写方式打开文件
CFile::shareDenyWrite 文件打开时禁止其它进程写该文件
CFile::shareExclusive 文件以独占方式打开时,禁止其它进程读写该文件
一般至少需要一种存取模式和一项共享模式,各选项间以或运算“|”连接。
2. 文件内容读写
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CFile操作详解详解, CFile各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的。
本文将对VisualC++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。
1.文件的查找当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。
MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。
下面这段代码演示了这个类的最基本使用方法。
CString strFileTitle;CFileFind finder;BOOL bWorking = finder.FindFile("C:\\windows\\sysbkup\\*.cab");while(bWorking){bWorking=finder.FindNextFile();strFileTitle=finder.GetFileTitle();}2.文件的打开/保存对话框让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。
MFC的类CFileDialog用于实现这种功能。
使用CFileDialog声明一个对象时,第一个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。
在构造CFileDialog对象时,如果在参数中指定了OFN_ALLOWMULTISELECT风格,则在此对话框中可以进行多选操作。
此时要重点注意为此CFileDialog对象的m_ofn.lpstrFile分配一块内存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的内存过小就会导致操作失败。
下面这段程序演示了文件打开对话框的使用方法。
CFileDialog mFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"All Files (*.*)|*.*||",AfxGetMainWnd());CString str(" ",10000);mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);str.ReleaseBuffer();POSITION mPos=mFileDlg.GetStartPosition();CString pathName(" ",128);CFileStatus status;while(mPos!=NULL){pathName=mFileDlg.GetNextPathName(mPos);CFile::GetStatus( pathName, status );}3.文件的读写文件的读写非常重要,下面将重点进行介绍。
文件读写的最普通的方法是直接使用CFile进行,如文件的读写可以使用下面的方法://对文件进行读操作char sRead[2];CFile mFile(_T("user.txt"),CFile::modeRead);if(mFile.GetLength()<2)return;mFile.Read(sRead,2);mFile.Close();//对文件进行写操作CFile mFile(_T("user.txt "), CFile::modeWrite|CFile::modeCreate);mFile.Write(sRead,2);mFile.Flush();mFile.Close();虽然这种方法最为基本,但是它的使用繁琐,而且功能非常简单。
我向你推荐的是使用CArchive,它的使用方法简单且功能十分强大。
首先还是用CFile声明一个对象,然后用这个对象的指针做参数声明一个CArchive对象,你就可以非常方便地存储各种复杂的数据类型了。
它的使用方法见下例。
//对文件进行写操作CString strTemp;CFile mFile;mFile.Open("d:\\dd\\try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);CArchive ar(&mFile,CArchive::store);ar<<strTemp;ar.Close();mFile.Close();//对文件进行读操作CFile mFile;if(mFile.Open("d:\\dd\\try.TRY",CFile::modeRead)==0)return;CArchive ar(&mFile,CArchive::load);ar>>strTemp;ar.Close();mFile.Close();CArchive的 << 和>>操作符用于简单数据类型的读写,对于CObject派生类的对象的存取要使用ReadObject()和WriteObject()。
使用CArchive的ReadClass()和WriteClass()还可以进行类的读写,如://存储CAboutDlg类ar.WriteClass(RUNTIME_CLASS(CAboutDlg));//读取CAboutDlg类CRuntimeClass* mRunClass=ar.ReadClass();//使用CAboutDlg类CObject* pObject=mRunClass->CreateObject();((CDialog* )pObject)->DoModal();虽然VC提供的文档/视结构中的文档也可进行这些操作,但是不容易理解、使用和管理,因此虽然很多VC入门的书上花费大量篇幅讲述文档/视结构,但我建议你最好不要使用它的文档。
关于如何进行文档/视的分离有很多书介绍,包括非常著名的《Visual C++ 技术内幕》。
如果你要进行的文件操作只是简单的读写整行的字符串,我建议你使用CStdioFile,用它来进行此类操作非常方便,如下例。
CStdioFile mFile;CFileException mExcept;mFile.Open( "d:\\temp\\aa.bat", CFile::modeWrite, &mExcept);CString string="I am a string.";mFile.WriteString(string);mFile.Close();4.临时文件的使用正规软件经常用到临时文件,你经常可以会看到C:\Windows\Temp目录下有大量的扩展名为tmp的文件,这些就是程序运行是建立的临时文件。
临时文件的使用方法基本与常规文件一样,只是文件名应该调用函数GetTempFileName()获得。
它的第一个参数是建立此临时文件的路径,第二个参数是建立临时文件名的前缀,第四个参数用于得到建立的临时文件名。
得到此临时文件名以后,你就可以用它来建立并操作文件了,如:char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH];GetTempPath(_MAX_PATH, szTempPath);GetTempFileName(szTempPath,_T ("my_"),0,szTempfile);CFile m_tempFile(szTempfile,CFile:: modeCreate|CFile:: modeWrite);char m_char='a';m_tempFile.Write(&m_char,2);m_tempFile.Close();5.文件的复制、删除等MFC中没有提供直接进行这些操作的功能,因而要使用SDK。
SDK中的文件相关函数常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。
它们的用法很简单,可参考MSDN。
1,判断文件是否存在access(filename,mode);2,对于不同用途又不同的文件操作,其中API函数CreateFile()也是比较有用处理方式,对于巨型文件很合适的其他的楼上的大都说了,不重复了.[1]显示对话框,取得文件名CString FilePathName;CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为S***E AS对话框if (dlg.DoModal() == IDOK)FilePathName=dlg.GetPathName();相关信息:CFileDialog 用于取文件名的几个成员函数:假如选择的文件是C:\WINDOWS\TEST.EXE则(1)GetPathName();取文件名全称,包括完整路径。
取回C:\WINDOWS\TEST.EXE(2)GetFileTitle();取文件全名:TEST.EXE(3)GetFileName();取回TEST(4)GetFileExt();取扩展名EXE[2]打开文件CFile file("C:\HELLO.TXT",CFile::modeRead);//只读方式打开//CFile::modeRead可改为 CFile::modeWrite(只写),//CFile::modeReadWrite(读写),CFile::modeCreate(新建)例子:{CFile file;file.Open("C:\HELLO.TXT",CFile::modeCreate|Cfile::modeWrite);...}[3]移动文件指针file.Seek(100,CFile::begin);///从文件头开始往下移动100字节file.Seek(-50,CFile::end);///从文件末尾往上移动50字节file.Seek(-30,CFile::current);///从当前位置往上移动30字节file.SeekToBegin();///移到文件头file.SeekToEnd();///移到文件尾[4]读写文件读文件:char buffer[1000];file.Read(buffer,1000);写文件:CString string("自强不息");file.Write(string,8);[5]关闭文件file.Close();参数内容:第一个参数为路径+文件名,最后一个为错误出现的结构.现在解释下第二个参数CFile::modeCreate Directs the constructor to create a new file. If the file exists already, it is truncated to 0 length.指定构造器创建一个新的文件,如果文件已经存在,则内容截0.CFile::modeNoTruncate Combine this value with modeCreate. If thefile being created already exists, it is not truncated to 0 length.Thus the file is guaranteed to open, either as a newly created file oras an existing file. This might be useful, for example, when opening asettings file that may or may not exist already. This option applies toCStdioFile as well.modeNoTruncate假如你不用这个参数的话,用modeCreate模式创建和打开一个文件,假如这个文件已经存在,则会清空这个已经存在的文件,加上modeNoTruncate的话,就不会清空这个文件了CFile::modeRead Opens the file for reading only.只是以读取方式打开CFile::modeReadWrite Opens the file for reading and writing.读与写同时CFile::modeWrite Opens the file for writing only.只写CFile::modeNoInherit Prevents the file from being inherited by child processes.阻止这个文件被子进程继承CFile::shareDenyNone Opens the file without denying otherprocesses read or write access to the file. Create fails if the filehas been opened in compatibility mode by any otherprocess.打开这个文件同时允许其它进程读写这个文件。