C/C++文件操作之CFile

本文详细介绍了CFile类在MFC应用程序中的应用,包括如何使用构造函数和成员函数来实现文件的打开、关闭、读写、定位及文件路径操作等常见功能。通过实例演示,帮助开发者熟练掌握CFile类的使用,提升开发效率。

CFileMFC文件类的基类,主要是在开发MFC应用程序时对文件操作比较方便。下面主要记录CFile类中常用的成员函数。

1、打开文件

(1)CFile(LPCTSTR lpszFileName,UINT nOpenFlags);//CFile类的一个构造函数

功能:打开一个文件

参数:lpszFileName 文件路径,此路径可为相对的也可为绝对的路径。 

     nOpenFlags 文件打开方式

其中打开方式nOpenFlags有以下取值:

CFile::modeCreate 构造新文件,若文件存在则设文件长度为0

CFile::modeNoTruncate 与modeCreate组合使用所创建的文件已存在则其长度不变为0

CFile::modeRead 以读的方式打开文件

CFile::modeReadWrite 以读写的方式打开文件

CFile::modeWrite 以写的方式打开文件

CFile::modeNoInherit 阻止文件被子进程继承

CFile::modeShareDenyNone 不禁止其它进程读或写访问CFile::modeDenyRead 禁止其它进程读此文件

CFile::modeDenyWrite 禁止其它进程写此文件

CFile::ShareExcelusive 以独占方式打开文件,禁止其它进程对其读写

CFile::shareCompat open函数里与CFile::ShareExcelusive一样

CFile::typeText 对回车换行设置特殊进程(只用在派生类)

CFile::typeBinary 设置二进制模式(只用在派生类)

使用如下:

CFile file("D:\\1.txt",CFile::modeRead|CFile::mode::Write);

(2)virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);

功能:打开文件

参数:lpszFileName 文件路径,此路径可为相对的也可为绝对的路径。 

     nOpenFlags 打开方式

     pError 指向一个存在的文件异常对象,获取失败操作的状态。 

返回值:打开成功返回TRUE,否则返回FLASE

使用如下:

CFile file;

File.open("D:\\1.txt",CFile::modeRead|CFile::modeWrite);//这里使用的参数pError的缺省值NULL;

2、关闭文件

virtual void Close( );

使用如下:

file.close();

3、写入/读出

(1)virtual UINT Read (void* lpBuf,UINT nCount);

功能:从文件中读取nCount个字节到lpBuf

参数:lpBuf 用来读取数据的缓冲区

     nCount 读取数据的最大字节数

返回值:实际读取的字节数

使用如下:

char lpBuf[128];

File.Read(lpBuf,100);//从文件中读取100个字节数到lpBuf

(2)DWORD ReadHuge(void* lpBuffer,DWORD dwCount);

功能:读取超过64k字节数据到缓冲区中

参数:lpBufffer 用来读取数据的缓冲区

     dwCount 读取数据的最大字节数

返回值:实际读取的字节数

用法与read一样

(3)virtual UINT Write(const void* lpBuf,UINT nCount);

功能:将缓冲区中的数据写入到文件中

参数:lpBuf 存放准备写入文件的数据缓冲区

     nCount 写入文件的最大字节数

返回值:实际写入文件的字节数

使用如下:

char* lpBuf = "C++ Programming";

file.Write(lpBuf,sizeof(lpBuf));

(4)(DWORD WriteHuge(void* lpBuffer,DWORD dwCount);

功能:写入超过64k字节数据到文件中

参数:lpBufffer 用来存放准备写入数据的缓冲区

     dwCount 写入数据的最大字节数

返回值:实际写入的字节数

用法与Write一样

4、定位文件

(1)virtual LONG Seek(LONG lOff,UINT nFrom);

功能:定位当前文件指针

参数:lOff 指针移动的字节数

     nFrom 指针移动模式

移动模式有如下三种:

CFile::begin 从文件起始位置开始向后移动lOff个字节

CFile::current 从当前文件指针开始向后移动lOff个字节

CFile::end 从文件末尾开始向前移动lOff个字节(此时lOff应为负数)返回值:lOff合法,则Seek返回从文件开始起的新字节偏移量。否则值未定义并产生CFileException异常。

使用如下:

file.Seek(100,CFile::begin);//从文件起始位置向前移动100个字节

(2)void SeekToBegin();

功能:文件指针移到文件起始位置

使用如下:

file.SeekToBegin();

(3)void SeekToEnd();

功能:文件指针移到文件末尾

使用如下:

file.SeekToEnd();

(4)virtual DWORD GetLength( ) const;

功能:获取文件长度

返回值:文件的长度

使用如下:

DWORD Length;

Length = file.GetLength();

(5)virtual void SetLength(DWORD dwNewLen);

功能:设置文件长度

使用如下:

file.SetLength(1000);

5、文件路径

(1)virtual CString GetFilePath( )const;

功能:获取文件的完整路径

返回值:文件的完整路径

使用如下:

CString FilePath;

FilePath = file.GetFilePath();

(2)virtual void SetFilePath(LPCTSTR lpszNewName);

功能:设置文件的完整路径

使用如下:

file.SetFilePath("D:\\1.txt");

(3)virtual DWORD GetPosition ( )const;

功能:获取文件指针相对于起始位置的偏移量,经常与Seek一起用

返回值文件指针相对于起始位置的偏移量

(4)static void PASCAL Rename(LPCTSTR lpszOldName,LPCTSTR lpszNewName);

功能:改名指定文件

参数:lpszOldName 原文件完全路径

     lpszNewName 新文件完全路径

使用如下:

file.Rename("D:\\1.txt","D:\\2.txt");

(5)static void PASCAL Remove(LPCTSTR lpszFileName);

功能:删除文件

参数:lpszFileName 需要删除的文件的相对路径或绝对路径

使用如下:

file.Remove("D:\\1.txt");

### CFile 类的使用方法及示例代码 CFileMFC(Microsoft Foundation Class)库中用于文件操作的一个重要类。它封装了 Windows API 函数,如 `CreateFile`、`ReadFile` 和 `WriteFile` 等,提供了面向对象的方式来处理文件操作[^1]。 以下是 CFile 类的基本用法和示例代码: #### 1. 构造函数 CFile 提供了多个构造函数以支持不同的使用场景: - **默认构造函数**:`CFile();` 创建一个未初始化的 CFile 对象。 - **基于句柄的构造函数**:`CFile(HANDLE hFile);` 使用已有的文件句柄创建 CFile 对象。 - **带路径和标志的构造函数**:`CFile(LPCTSTR lpszFileName, UINT nOpenFlags);` 使用文件名和打开选项创建 CFile 对象。 #### 2. 打开文件 如果使用默认构造函数或基于句柄的构造函数创建对象,则需要显式调用 `Open` 方法来打开文件。例如: ```cpp CFile file; file.Open(_T("example.txt"), CFile::modeRead | CFile::typeBinary); ``` #### 3. 写入文件 可以通过 `Write` 方法向文件写入数据。例如: ```cpp CFile file(_T("output.txt"), CFile::modeCreate | CFile::modeWrite); const char* data = "Hello, World!"; file.Write(data, strlen(data)); file.Close(); ``` #### 4. 读取文件 可以通过 `Read` 方法从文件中读取数据。例如: ```cpp CFile file(_T("input.txt"), CFile::modeRead); char buffer[1024]; DWORD bytesRead = file.Read(buffer, sizeof(buffer) - 1); buffer[bytesRead] = '\0'; // 确保字符串以 null 结尾 file.Close(); ``` #### 5. 获取文件大小 可以使用 `GetLength` 方法获取文件的大小(以字节为单位)。例如: ```cpp CFile file(_T("example.txt"), CFile::modeRead); ULONGLONG fileSize = file.GetLength(); file.Close(); ``` #### 6. 关闭文件 在完成文件操作后,必须调用 `Close` 方法关闭文件。例如: ```cpp CFile file(_T("example.txt"), CFile::modeRead); // 文件操作... file.Close(); ``` #### 完整示例代码 以下是一个完整的示例,展示如何使用 CFile 类进行文件的读写操作: ```cpp #include <afx.h> #include <tchar.h> #include <iostream> int main() { try { // 写入文件 CFile fileWrite(_T("example.txt"), CFile::modeCreate | CFile::modeWrite); const char* data = "Hello, World!"; fileWrite.Write(data, strlen(data)); fileWrite.Close(); // 读取文件 CFile fileRead(_T("example.txt"), CFile::modeRead); char buffer[1024]; DWORD bytesRead = fileRead.Read(buffer, sizeof(buffer) - 1); buffer[bytesRead] = '\0'; // 确保字符串以 null 结尾 std::cout << "File content: " << buffer << std::endl; fileRead.Close(); // 获取文件大小 CFile fileSizeFile(_T("example.txt"), CFile::modeRead); ULONGLONG fileSize = fileSizeFile.GetLength(); fileSizeFile.Close(); std::cout << "File size: " << fileSize << " bytes" << std::endl; } catch (CFileException* e) { e->ReportError(); // 显示错误信息 e->Delete(); // 释放异常对象 } return 0; } ``` ### 注意事项 - 在使用 CFile 类时,务必确保正确关闭文件,否则可能导致资源泄漏。 - 如果发生异常(如文件不存在或权限不足),CFile 会抛出 `CFileException` 异常,需要捕获并处理[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值