正文

第十四课:文件和注册表读写2007-09-25 15:49:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lym51/29659.html

分享到:

第十四课:文件和注册表读写

一、文件操作:

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);

阅读(5062) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册