第十四课:文件和注册表读写
一、文件操作:
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);
评论