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的大小
);