MFC 文件I/O和串行化
1.枚举所有文件夹(递归)
void EnumerateFolders ()
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile (_T ("*.*"), &fd); if (hFind != INVALID_HANDLE_VALUE) {
do {
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
CString name = fd.cFileName;
if (name != _T (".") && name != _T ("..")) {
TRACE (_T ("%s\n"), fd.cFileName);
::SetCurrentDirectory (fd.cFileName);
EnumerateFolders ();
::SetCurrentDirectory (_T (".."));
}
}
} while (::FindNextFile (hFind, &fd));
::FindClose (hFind);
}
}
//比如说枚举E:\svn文件夹,不过可能会导致栈溢出
::SetCurrentDirectory(_T("e:\\svn"));
EnumerateFolders();
2.串行化类(版本控制http://www.vckbase.com/index.php/wv/1097)
class MyLine:public CObject
{
DECLARE_SERIAL(MyLine);
public:
MyLine(){};
MyLine(CPoint from,CPoint to){
m_ptFrom=from;
m_ptTo=to;
}
void Serialize(CArchive &ar);
protected:
CPoint m_ptFrom;
CPoint m_ptTo;
}; IMPLEMENT_SERIAL(MyLine,CObject,);
void MyLine::Serialize(CArchive &ar){ if(ar.IsLoading()){
ar<<m_ptFrom<<m_ptTo;
}else{
ar>>m_ptFrom>>m_ptTo;
}
}
下面是串行化输入输出demo:
void CMainWindow::OnFileWrite()
{
// TODO: 在此添加命令处理程序代码
CFile file(_T("abc.txt"),CFile::modeCreate|CFile::modeWrite);
CArchive ar(&file,CArchive::store);
int i=;
float f=1.3f;
char ch='c';
CString str=_T("abc");
ar<<i<<f<<ch<<str;
} void CMainWindow::OnFileRead()
{
// TODO: 在此添加命令处理程序代码
CFile file(_T("abc.txt"),CFile::modeRead);
CArchive ar(&file,CArchive::load);
int i;
float f;
char ch;
CString str;
CString strResult;
ar>>i>>f>>ch>>str; //必须按顺序输出,也就是说存入的数据保持着原有的类型
strResult.Format(_T("%d,%f,%c,%s"),i,f,ch,str);
AfxMessageBox(strResult);
}
MFC 文件I/O和串行化的更多相关文章
- MFC【6】文件I/O和串行化
文件输入和输出(I/O)服务是所有操作系统的主要工作.Microsoft Windows提供了各种API函数用来读.写和操作磁盘文件.MFC将这些桉树和CFile类融合在面对对象的模型里.其中CFil ...
- MFC如何生成一个可串行化的类
一.MFC允许对象在程序运行的整个过程中持久化的串行化机制 (1)串行化是指向持久化存储媒介(如一个磁盘文件)读或写对象的过程. (2)串行化用于在程序运行过程时或之后修复结构化数据(如C++类或结构 ...
- VC++ MFC如何生成一个可串行化的类
一.MFC允许对象在程序运行的整个过程中持久化的串行化机制(1)串行化是指向持久化存储媒介(如一个磁盘文件)读或写对象的过程.(2)串行化用于在程序运行过程时或之后修复结构化数据(如C++类或结构)的 ...
- QDataStream类参考(串行化数据,可设置低位高位,以及版本号),还有一个例子
QDataStream类提供了二进制数据到QIODevice的串行化. #include 所 有成员函数的列表. 公有成员 QDataStream () QDataStream ( QIODevice ...
- C#基础知识回顾--串行化与反串行化
串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上, 在取消串行化时,对象会被还原,且不能与其原实例区别开来.只需给类添加Serializable属性, ...
- C#--串行化与反串行化
串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上,在取消串行化时,对象会被还原,且不能与其原实例区别开来.只需给类添加Serializable属性,就 ...
- MFC文件IO和串行化
一. MFC中CFile对象实现了磁盘文档的读写,但是大部分MFC应用程序的IO服务都使用CArchive对象来完成.不管CFile和Archive输入输出的都是二进制数据,非文本数据. int a ...
- MFC用串行化实现文档存储和读取功能
在面向对象的程序设计中,一般都是用二进制文件来保存文档资料.在VC++中控制和使用文件流的方法很多,MFC程序设计中常用的有两种方法:用CFile对象存储和读取文件:利用串行化存取文件.其中用CFil ...
- MFC六大核心机制之四:永久保存(串行化)
永久保存(串行化)是MFC的重要内容,可以用一句简明直白的话来形容其重要性:弄懂它以后,你就越来越像个程序员了! 如果我们的程序不需要永久保存,那几乎可以肯定是一个小玩儿.那怕我们的记事本.画图等小程 ...
随机推荐
- ffmpeg的centos、msys2、msvc编译
msys2 和 centos https://ffmpeg.org/download.html https://ffmpeg.zeranoe.com/builds/ Windows MSYS2准备 1 ...
- hdu 5980 Find Small A(水,模拟)
Find Small A Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- .zip.001 -- .zip.003解压缩
一.源文件移到固定短路径 二.cmd执行合并 copy /B 201702.zip.001 + 201702.zip.002 + 201702.zip.003 1.zip 三.WinRAR解压缩
- HDU 3452 Bonsai(树形dp)
Bonsai Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- Codeforces Round #394 (Div. 2) A. Dasha and Stairs
A. Dasha and Stairs time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...
- 不安装APK直接启动应用
相信这样一个问题,大家都不会陌生, “有什么的方法可以使Android的程序APK不用安装,而能够直接启动”. 发现最后的结局都是不能实现这个美好的愿望,而腾讯Android手机游戏平台却又能实现这个 ...
- Mac os x 下配置Intellij IDEA + Tomcat 出现权限问题的解决办法
出现的错误提示如下: 下午9:11:27 All files are up-to-date下午9:11:27 All files are up-to-date下午9:11:27 Error runni ...
- leetcode_sql_3,181,182,183
181. Employees Earning More Than Their Managers The Employee table holds all employees including the ...
- 关于JS浅拷贝和深拷贝
在 JS 中有一些基本类型像是Number.String.Boolean,而对象就是像这样的东西{ name: 'Larry', skill: 'Node.js' },对象跟基本类型最大的不同就在于他 ...
- BZOJ3214 [Zjoi2013]丽洁体
题意 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做这种题,因为较其它题 ...