《VC++深入详解》读书笔记——12.文本和注册表操作

1. const char*和char* const

const char*类型的指针(指向常量的指针)其所指向的内容是常量,是不可以修改的,但是其指针值是可以修改的;
char* const类型的指针(常量指针),它的地址是一个常量,也就是说,它的指针值是常量,不可以修改,但其指向的内存是可以修改的,

2. C语言对文件操作的支持

(1) FILE fopen(const char filename,const char* mode);//打开文件
参数定义:filename,指向文件名字符串的常量指针;mode,指定文件打开的模式。

(2) size_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream);//写文件
参数定义:buffer,要写入的数据;size,以字节为单位的项的大小;count,将要被写入的项的最大数目;stream,指向FILE类型的指针。

(3) fclose(const char* filename);//关闭文件
参数定义:filename,指向FILE类型的指针。

(4) int fseek(FILE *stream, long offset,int origin);//文件指针定位
参数定义:stream,指向FILE结构体指针;offset,设定偏移量;origin,指定文件指针的起始位置。

(5) size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
参数定义:与fwrite一致

3. C++对文件操作的支持

(1) 读取文件流
ofstream(const char* szName, int nMode =ios::out, int nProt=filebuf::openprot);
参数定义:szName,指定将要打开的文件名;nMode,指定文件打开的方式;nProt,指定文件保护规格说明

(2)写入文件流
ifstream(const char* szName);
参数定义:szName,文件名字。

4. Win32 API对文件操作的支持

//文件的创建与打开
HANDLE CreateFile(
LPCTSTR lpFileName,  //创建或打开的对象名称
DWORD dwDesireAccess,   //对对象的访问方式
DWORD dwShareMode,   //指定共享方式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //
DWORD dwCreationDisposition,  //如何创建文件
DWORD dwFlagAndAttributes, //设置文件属性和标志
HANDLE hTemplateFile  //模板文件的句柄
);

//文件的写入
BOOL WriteFile(
HANDLE hFile,  //文件的句柄
LPCVOID lpBuffer, //写入文件的数据的缓冲区的指针
DWORD nNumberofBytesToWrite, //写入的字节数
LPDWORD lpNumberofBytesWtitten, //接收实际写入到文件的字节数
LPOVERLAPPED lpOverlapped   //异步访问
);

//文件的读取
BOOL ReadFile(
HANDLE hFile,  //句柄
LPVOID lpBuffer,  //缓冲区指针,接收数据
DWORD nNumberOfBytesToRead, //从文件中读取的字节数
LPDWORD lpNumberOfBytesRead,  //接收实际读到的字节数
LPOVERLAPPED lpOverlapped);   //异步访问

5. MFC对文件操作的支持

MFC中提供的支持文件操作的基类:CFile,该类提供了没有缓存的二进制格式的磁盘文件输入输出功能,典型的构造函数:

CFile(LPCTSTR lpszFileName,UNIT nOpenFlags);

lpszFileName指定文件的名称,nOpenFlags参数指定文件共享和访问的方式。

取值说明
CFile::modeCreate指示构造函数创建一个新文件。如果该文件已经存在,那么将它的长度截断为0
CFile::modeNoTruncate与modeCreate组合使用,如果正在创建的文件已经存在,那么它的长度将不会截断为0
CFile::modeRead打开文件,该文件仅用于读取
CFile::modeReadWrite打开文件,该文件可读可写
CFile::modeWrite打开文件,该文件仅用于写入操作
CFile::modeNoInherit禁止子进程继承该文件
CFile::shareDenyNone打开文件,同时不拒绝其他进程对该文件的读取或写入访问。如果该文件已经被其他进程以兼容模式打开,那么文件创建失败
CFile::shareDenyRead打开文件,同时拒绝其他进程对该文件的读取访问。如果该文件已经被其他进程以兼容模式,或者为读取访问打开,那么文件创建失败
CFile::sharedenyWrite打开文件,同时拒绝其他进程对该文件的写入访问。如果该文件已经被其他进程以兼容模式,或者为写入访问打开,那么文件创建失败
CFile::shareExclusive以排他模式打开文件
CFile::shareCompat此标志在32为MFC中不可用。当在CFile::Open函数中使用,次此标记将映射为CFile::shareExcusive
CFile::typeText设置文本模式,带有一对回车换行字符(仅在CFile类的派生类中使用)
CFile::typeBinary设置二进制模式

(1)文件的写入:file.Write()
(2)文件的读取:file.Read()
(3)CFileDialog类

CFileDialog(
BOOL bOpenFileDialog,  //此参数设置为true,将为打开对话框;否则为保存对话框
LPCTSTR lpszDefExt = NULL, //指定默认文件的拓展名
LPCTSTR lpszFileName = NULL, //指定显示在文件对话框中的初始文件名
DWORD dwFlag = OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, //制定对话框
LPCTSTR lpszFilter = NULL, //用来指定一个或者一组文件过滤器
CWnd* pParentWnd = NULL; //指定文件对话框的父窗口或者拥有者窗口
)

6. Win.ini文件的访问

(1)Win.ini文件的结构
程序设计时常常需要将一些初始化信息写入一个配置文件中,当程序启动时从这个配置文件中读取这些初始化信息。
现在大部分程序都将这个信息写入注册表,早期的一些程序将信息写入Win.ini文件。

for 16-bit app support
[fonts]
[extensions]  //段名
[mci extensions]
[files]
[mail]
MAPI=1
CMCDLLNAME32=mapi32.dll   //键名 = 键值
CMCDLLNAME=mapi.dll

(2)Win.ini文件的写入

BOOL WriteProfileString( 
LPCTSTR lpAppName,  //段名
LPCTSTR lpKeyName,  //键名
LPCTSTR lpString     //键值
);

(3)Win.ini文件的读取

DWORD GetProfileString(
LPCTSTR lpAppName, //段名
LPCTSTR lpKeyName, //键名
LPCTSTR lpDefault,  //空终止的默认字符串
LPCTSTR lpReturnString,//指向一个缓冲区的指针
DWORD nSize //所指向的缓冲区的大小,单位是字节
);

7.注册表的编程

(1)创建键

LONG RegCreateKey(
HKEY hKey,  //指向当前打开表项的句柄,即注册表中的几个分支
LPCTSTR lpSubKey, //将打开或者创建的表项的名称
PHKEY phkResult //返回值,指向一个变量指的针,接收创建或打开的表项的句柄
)

(2)打开键

LONG RegOpenKey(
HKEY hKey,  //指向当前打开表项的句柄,即注册表中的几个分支
LPCTSTR lpSubKey,  //表项的名字
PHKEY phkResult //返回值,返回打开的注册表的句柄
);

(3)写入注册表

LONG RegSetValue(
HKEY HKey,  //指向当前打开表项的句柄,即注册表中的几个分支
LPCTSTR lpSubKey,//表项的名字
DWORD dwType,  //将被存储的数据类型,REG_SZ,实际上就是字符串类型
LPCTSTR lpData,  //字符串,将要设置的数据
DWORD cbData  //字符串大小
);

LONG RegSetValue(
HKEY HKey,  //指向当前打开表项的句柄,即注册表中的几个分支
LPCTSTR lpSubKey,//表项的名字
DWORD Reserved, //保留,必须为0
DWORD dwType,  //将被存储的数据类型,REG_SZ,实际上就是字符串类型
CONST BYTE *lpData,  //字符串,将要设置的数据
DWORD cbData  //字符串大小
);

(4)读数据

LONG RegQueryValue(
HKEY hKey,  //注册表分支
LPSCSTR lpSubKey, //键名
LPTSTR lpValue, //返回值,返回一个字符串
PLONG lpcbValue //指向一个变量,指定用此参数指定的buffer的大小
);

LONG RegQueryValueEx(
HKEY hKey,  //注册表分支
LPSCSTR lpSubKey, //键名
DWORD Reserved, //保留,必须为0
LPDWORD lpType,  //指向一个变量的指针,接收保存数据类型
LPBYTE lpData, //返回值,接收数据
PLDWORD lpcbData //指向一个变量,指定用此参数指定的buffer的大小
);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值