第十四课:文件和注册表读写 一、文件操作: 1. C的方式: FILE *p; p=fopen("c:\\1.txt","w"); fwrite("abc",1,4,p); fclose(p); 2. C++的方式: ofstream f("c:\\1.txt"); f.write("hello",5); 3. MFC的方式: I. 写文件: CFile f("c:\\1.txt",CFile::modeWrite|CFile::modeCreate); f.Write("hello",5); a.几个标志的作用: CFile::modeCreate:没有指定的文件就产生一个新文件,有就打开该文件,并将它裁剪到0; CFile::modeNoTruncate :打开文件时不裁剪到0; b.写数据到文件末尾: CFile f("c:\\1.txt",CFile::modeWrite|CFile::modeCreate| CFile::modeNoTruncate); f.SeekToEnd(); f.Write("hello",5); II. 读文件: CFile f("c:\\1.txt",CFile::modeRead); char buf[10]; memset(buf,0,10); f.read(buf,5); MessageBox(buf); III. 文件对话框: CFileDialog dlg(false); //生成保存对话框 dlg.m_ofn.lpstrFilter="abc文件(*.abc)\0*.abc\0文本\0*.txt\0all file\0*.*\0\0"; //设置对话框的过滤器 dlg.m_ofn.lpstrTitle="保存"; //修改对话框的标题 dlg.m_ofn.lpstrDefExt="txt"; //设置对话框的默认扩展名 if(IDOK==dlg.DoModal()) { ofstream f(dlg.GetPathName()); //得到用户选择的文件的全路径名 f.write(aaa",3); } 4. 文本文件和二进制文件的区别: 文件文件是一种特殊的二进制文件,当它遇到回车键10时,写入文件时会自动地在它的前面加一个13,而读出文件时遇到13 10 的组合时,又把它还原到10。而二进制文件就是把数据原封不动的写入文件,原封不动的再读取出来,没有文本文件的这种转换操作。 下面的代码演示了之间的这种区别: 写入文件时: ofstream f("c:\\1.txt"); char buf[3]; buf[0]='a'; buf[1]='\n'; buf[2]='b'; f.write(buf,3); 读出文件时: ifstream f("c:\\1.txt"); f.setmode(filebuf::binary); char buf[5]; memset(buf,0,5); f.read(buf,5); CString str; str.Format("%d,%d,%d,%d",buf[0],buf[1],buf[2],buf[3]); MessageBox(str); 在写入文件时不指定格式,文件将按文本格式存储,此时读出文件时指定二进制格式,读出的数据如下图: 如果注释f.setmode(filebuf::binary);语句,文件将按文本文件读出,如下图: 二、注册表的操作 1. 读写win.ini文件: a.写: WriteProfileString("haha","test","123"); b.读: char buf[5]; GetProfileString("haha","test","000",buf,5); C.实现一个简单的计数器: char buf[5]; int x=GetProfileInt("haha","test",0); sprintf(buf,"%d",x+1); WriteProfileString("haha","test",buf); 2. 读写注册表: a.使用旧函数: 在CwinApp中旧函数数据将写到注册表中,在InitInstance()中加入代码: SetRegistryKey(_T("http://www.it315.org")); int x =GetProfileInt("It315","count",0); if(x>5) return false; WriteProfileInt("It315","count",x+1); 数据将写到注册表的 HKEY_CURRENT_USER\Software\http://www.it315.org\FileOp\It315键下的count中。 b. 使用新函数在注册表任意位置读写: 写: RegCreateKey(HKEY_LOCAL_MACHINE,"software\\http://www.it315.org",&hKeyIt315); 读: char *buf; long len; RegQueryValue(HKEY_LOCAL_MACHINE, "software\\http://www.it315.org\\It315\\abc",NULL,&len); buf=new char[len]; RegQueryValue(HKEY_LOCAL_MACHINE, "software\\http://www.it315.org\\It315\\abc",buf,&len); MessageBox(buf);

评论