VS_MFC:文件读写
-
设计对话框界面,一个用于保存数据的按钮,三个单选按钮用于选择数据类型,两个编辑框分别用来输入数据个数和保存的文件名。
-
修改控件的ID:
按钮:IDC_Save;
单选按钮:IDC_Rand;IDC_Fibonacci;IDC_Factorial;
编辑框:IDC_DataNum;IDC_txtName;
-
修改属性,添加变量:
第一个单选按钮的Group为true,添加变量int DataType;
输入数据个数的编辑框的Number属性为true,添加变量UINT m_DataNum;
输入文件名的编辑框:添加变量CString m_txtName;
-
修改构造函数中变量的初始值,将数据个数默认值改为100,将文件名修改默认值为"Data.txt".
-
编写保存函数,首先获取界面数据,然后判断数据类型,计算出对应的数据,通过CStdioFile类的对象将数据写入txt文件中,Open函数可以指定保存路径,默认保存在工程文件的Demo\Demo\文件夹下。
1、随机数
for (int i = 0; i < m_DataNum; i++)
Data[i] = rand()%10000;
2、斐波那契数列
Data[0] = 1; Data[1] = 1;
for (int i = 2; i < m_DataNum; i++)
Data[i] = Data[i - 1] + Data[i - 2];
3、阶乘
for (int i = 0; i < m_DataNum; i++)
{
Data[i] = 1;
for (int j = 1; j <= i+1; j++)
Data[i] *= j;
}
4、文件保存
CStdioFile file;
file.Open(m_txtName, CFile::modeCreate | CFile::modeWrite | CFile::typeText);
CString str;
for (int i = 0; i < m_DataNum; i++)
{
str.Format(_T("%d\t%g\n"), i + 1, Data[i]);
file.WriteString(str);
}
file.Close();
AfxMessageBox(_T("已保存数据到 ")+m_txtName+_T(" 文件中!"));
-
测试程序,启动调试,选择数据类型,设置数据个数和文件名称。
1、随机数测试,设置100个数
每次保存完都有提示。
-
2、fibonacci数列测试,设置20个数
-
3、阶乘测试,设置15个数,阶乘增长速度很快,所以没必要保存太多。
END
文件的查找
当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。
CString strFileTitle; CFileFind finder; BOOL bWorking = finder.FindFile("C:\\windows\\sysbkup\\*.cab");
文件模式标志 说明
CFile::modeCreate 创建方式打开文件,如文件已存在则将其长度设置为0
CFile::modeNoInherit 不允许继承
CFile::modeNoTruncate 创建文件时如文件已存在不对其进行截断
CFile::modeRead 只读方式打开文件
CFile::modeReadWrite 读写方式打开文件
CFile::modeWrite 写入方式打开文件
CFile::shareCompat 在使用过程中允许其他进程同时打开文件
CFile::shareDenyNone 在使用过程中允许其他进程对文件进行读写
CFile::shareDenyRead 在使用过程中不允许其他进程对文件进行读取
CFile::shareDenyWrite 在使用过程中不允许其他进程对文件进行写入
CFile::shareExclusive 取消对其他进程的所有访问
CFile::typeBinary 设置文件为二进制模式
CFile::typeText 设置文件为文本模式