您的位置:首页 > 其它

12文件和注册表操作(1)

2007-08-03 15:01 309 查看
12文件和注册表操作(1)
1.const char*和char* const
const char*类型是指向常量的指针,注意此时const所在的位置:在"*"的前面。const
在char的前面或后面都是一样的,但通常将const放置在char的前面。对一个利用const char*
类型定义的常量指针来说,不能修改其指向的内存中的内容,但可以修改其所指向的内存地址。

char* const类型定义的是一个指针常量。注意此时const的位置:在"*"的后面,但在所定义的指针名称的
前面。这种定义形式表明定义了一个指针常量。要特别注意的是,对于指针常量,必须在其定义的同时赋值。
指针常量表示指针本身是常量。此指针值不能修改,但所指向的内容是可以修改。

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

文件的打开
FILE * fopen ( const char *filename, const char *mode);
filename 指向文件名字符串的常量指针类型,表明将要打开的文件;
mode指定文件打开的模式;
模式如下:
r 为读取而打开。如果文件不存在或不能找到,函数调用失败
w 为写入操作打开一个空文件。如果给定的文件已经存在,那么它的内容将被清空
a 为定入操作打开文件。如果文件已经存在,那么在该文件尾部添加新数据,在定入新的数据之前,不
会移除文件中已有的EOF标记;如果文件不存在,那么首先创建这个文件
r+ 打开文件用于定入操作和读取操作,文件必须存在
w+ 为写入操作和读取操作打开一个空的文件。如果给定文件已经存在,那么它的内容将被清空
a+ 打开文件用于读取操作和添加操作。并且添加操作在添加新数据之前会移除该文件中已有的EOF标记,
然后当写入操作完成之后再恢复EOF标记。如果指定文件不存在,那么首先将创建这个文件

文件的写入
size_t fwite(const void *buffer,size_t size,size_t count,FILE *stream);
buffer 指向将要被写入文件的数据
size 以字节为单位的项的大小。类型是size_t,实际上就是unsigned integer类型。
count 将要被写入的项的最大数目。
stream 为文件指针

C语言中的文件操作用到了缓冲技术,所以写入以后要关闭或者刷新,要不然只有到了缓冲区满了以后才会真正写入文件

文件的关闭
int fclose( FILE *stream );

文件的刷新
int fflush( FILE *stream );

文件指针定位
int fseek( FILE *stream, long offset, int origin );
stream 文件指针
offset 设定的偏移量
origin 指定文件指针的起始位置。
取值SEEK_CUR(从文件指针当前位置处开始)
SEEK_END(从文件的结尾处开始)
SEEK_SET(从文件的开始处开始)
void rewind( FILE *stream );
该函数将文件指针重新放置到文件的开始处。

文件的读取
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
buffer是指向用来存放数据的缓冲区的指针。
字符串以"/0"结束,读取的时候要确定好buffer的格式

void *memset( void *dest, int c, size_t count ); //把一个数组用C填充count个

(*)使用C语言对文件进行文件进行读取操作时
(1)在读取文件数据时,如果是字符数据,通常在定义用来保存该数据的字符数组时
,在字符数据个数的基础上,多分配一个字节,以存放表示字符串结尾的字符:"/0"
(2)在读取文件内容时,应正确地设置文件指针的位置。

二进制文件和文本文件
文件中是计算机内存中以二进制表示的数据在外部存储介质上的另一种存放形式。对于文件文件来说,
它只是一种特殊形式的文件,它所存放的每一个字节都可以转换为一个可读的字符。
文件方式和二进制文件
当按照文件方式向文件中写入数据时,一旦遇到"换行"字符(ASCII码为10),则会转换为"回车-换行"
(ASCII码分别为13、10).在读取文件时,一旦遇到"回车-换行"的组合(连续的ASCII码为13、10),则会转换为换行字符(ASCII为10).
当按照二进制方式向文件中写入数据时,则会将数据在内存中的存储形式原样输出到文件中。
由于文件本文和二进制方式在读取和写入文件时的差异,所以在写入和读取文件时要保持一致。
以那种方式写入的,以那种方式读取。

C++对文件操作的支持
向文件写入数据可以使用ofstream类来实现,其构造函数为:
ofstream( const char* szName,int nMode = ios::out, int nProt = filebuf::openprot);
szName 指定将要打开的文件名
nMode指定文件打开的模式,其取值如表
ios::app 函数将执行一个定位操作,将文件指针移动到文件的结尾。当向文件写入新数据时,将总是添加
到文件的结尾处,即使已经用ostream::seekp函数移动了文件指针的位置
ios::ate 函数将执行一个定位操作,将文件指针移动到文件的结尾。当向文件写入第一个新的字节数据时,将在文件的末尾处添加
但随后写入的其他字节的数据,将被写入到当前位置
iso::in 如果指定了此模式,则原始文件(如果存在的话)将不会被截断
ios::out 打开文件,用于输出(暗指用于所有的ofstream对象)
ios::trunc 如果文件已经存在,则它的内容将被清空。如果指定了ios::out模式,并且没有指定ios::app,
ios::ate和ios::in模式,则就隐含地指定了此模式。
ios::nocreate 如果文件不存在,则函数失败
ios::noreplace 如果文件已经存在,则函数失败
ios::binary 以二进制文件方式打开文件(默认是文本方式)
nProt
指定文件保护规格说明
filebuf::sh_compat 兼容共享模式
filebuf::sh_none 排他独占模式,不共享
filebuf::sh_read 允许读共享
filebuf::sh_write 允许写共享
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: