在VC++编程中,CFile类是MFC(Microsoft Foundation Classes)库中用于处理文件操作的核心组件。它提供了丰富的功能,使得开发者能够方便地进行文件的读取、写入、定位以及文件属性的获取等操作。CFile类是CObject的派生类,通过它,我们可以简化对磁盘上文件的操作。
### 1. 文件查找
文件查找是文件操作的基础,CFileFind类用于查找特定的文件或符合特定条件的文件集合。以下是一个简单的例子:
```cpp
CString strFileTitle;
CFileFind finder;
BOOL bWorking = finder.FindFile("C:\\windows\\sysbkup\\*.cab");
while (bWorking)
{
bWorking = finder.FindNextFile();
strFileTitle = finder.GetFileTitle();
}
```
这段代码首先创建了一个CFileFind对象finder,然后调用FindFile()函数查找"C:\\windows\\sysbkup\\*.cab"路径下的所有.cab文件。FindNextFile()函数用于查找下一个匹配的文件,GetFileTitle()则用于获取当前找到文件的名称。
### 2. 文件打开/保存对话框
CFileDialog类是用于显示标准文件打开或保存对话框的类。以下是一个文件打开对话框的例子:
```cpp
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);
}
```
这里创建了一个CFileDialog对象mFileDlg,允许用户多选文件,并设置了对话框的样式和过滤器。GetStartPosition()和GetNextPathName()方法用于获取用户选择的每个文件的路径。
### 3. 文件的读写
CFile类提供了直接读写文件的方法,例如:
```cpp
// 读操作
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();
```
这段代码展示了如何打开文件并读取或写入数据。CFile::Read()用于读取数据,CFile::Write()用于写入数据,CFile::Close()关闭文件。
### 使用CArchive进行序列化操作
CArchive类提供了一种更加高级的文件读写方式,支持序列化,可以方便地存储和恢复对象。以下是一个使用CArchive的例子:
```cpp
CString strTemp;
CFile mFile;
mFile.Open("d:\\dd\\try.TRY", CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite);
CArchive ar(&mFile, CArchive::store);
ar << strTemp; // 写入字符串
ar.Flush();
mFile.Close();
// 读取操作
mFile.Open("d:\\dd\\try.TRY", CFile::modeRead);
CArchive arRead(&mFile, CArchive::load);
arRead >> strTemp; // 读取字符串
mFile.Close();
```
在这个例子中,CArchive::store用于写入,CArchive::load用于读取。通过这种方式,你可以方便地将复杂的数据结构保存到文件并重新加载。
CFile和CArchive类是VC++中处理文件操作的主要工具。理解并熟练运用它们,可以使你在编程过程中更有效地管理文件,提高代码的效率和可维护性。