MFC文件读取以及写入
自定义了一个结构体,将对象保存至容器中,并将数据写入文件保存至本地:
struct Student
{
CString m_name;
CString m_sex;
CString m_age;
};
//在OnInitDialog模拟数据并进行写文件
BOOL CCFileTestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化代码
CArray<Student> vec_stu;
initInfo(vec_stu);
CString str = _T("D://student");
if (PathFileExists(str))
{
//若已存在,则删除已经存在的文件以及文件夹
myDeleteDirectory(str);
}
WriteFile(vec_stu);
return TRUE;
}
//模拟信息
void CCFileTestDlg::initInfo(CArray<Student>& arr)
{
for (int i = 0; i < 100; i++)
{
Student stu;
CString str;
str.Format(_T("%d"),i);
stu.m_age = str;
stu.m_name = str;
stu.m_sex = str;
arr.Add(stu);
}
}
//写文件
void CCFileTestDlg::WriteFile(CArray<Student>& vec)
{
CString str = _T("D://student");
CFile file;
Student student;
//创建文件夹
CreateDirectory(str, NULL);
CArray<CString> vec_str;
for (int i = 0; i < 10; i++)
{
CString str;
str.Format(_T("%d"),i);
vec_str.Add(str);
}
for (int i = 0; i < vec_str.GetSize(); i++)
{
CString FileName(str + _T("//") + vec_str[i] + _T(".st"));
for (int j = 0; j < vec.GetSize(); j++)
{
//判断文件是否存在
if (PathFileExists(FileName))
{
//如果文件已经存在则写入
file.Open(FileName, CFile::modeWrite);
}
else
{
//如果问价不存在则创建
file.Open(FileName, CFile::modeCreate | CFile::modeWrite);
}
//将操作文件的指针偏移到文件最后的位置
DWORD dwPosition = file.GetPosition();
file.Seek(dwPosition, CFile::end);
//开始写文件
file.Write(&vec[j], sizeof(student));
file.Flush();
file.Close();
}
}
}
//删除已存在的文件夹以及文件
BOOL CCFileTestDlg::myDeleteDirectory(CString directory_path)
{
BOOL bRes = TRUE;
BOOL bTemp;
CFileFind finder;
CString path = directory_path + _T("\\*.*");
BOOL bWorking = finder.FindFile(path);
while (bWorking)
{
bWorking = finder.FindNextFile();
path = finder.GetFilePath();
if (!finder.IsDots())
{
if (finder.IsDirectory())
{
bTemp = myDeleteDirectory(path); // 递归
bRes = bTemp && bRes ? TRUE : FALSE;
}
else
{
bTemp = DeleteFile(path); // 删除文件
bRes = bTemp && bRes ? TRUE : FALSE;
}
}
}
bTemp = RemoveDirectory(directory_path); // 删除空文件夹
bRes = bTemp && bRes ? TRUE : FALSE;
return bRes;
}
运行结果: