关于文件
1,用fopen打开文件时,以r+,w+,a+方式打开的文件都可以读和写,以r+方式打开文件,文件位置指针在文件开始处,所以写操作覆盖原来的内容;以w+方式打开文件时,如果文件存在,则原内容被删除,读操作将读不到内容,除非写入内容后读;以a+方式打开文件时,如果是读文件,从文件开始位置读,如果是写文件从文件结尾处写。
这三种打开方式的区别是这样吗?
2,关于文本文件与二进制文件的读写:
将文本文件读入内存,是将文本文件中的字符一个一个转换为二进制读入内存;
将内存内容写入文本文件,是将内存内容一个字节一个字节的写;
将二进制文件读入内存,字符,整型数据和实型数据都以其二进制形式读入内存,整型和实型数据按其原值的二进制形式读入内存,不是一个字符一个字符地读;
将内存内容写入二进制文件,字符,整型和实型数据分别转换成相应的字符,整型和实型数据写入二进制文件。
上面是看书之后的初步理解,是这样吗?很不确定。
另外,回车和换行符有什么区别?在换行处,用getc只读取到换行符,但用ftell获取的位置值增加2。回车换行在文本文件和二进制文件中的读取又是怎样的?
3,二进制文件的读写只能用fread和fwrite,而文本文件的读写所有输入输出函数都可以用,是这样吗?
[解决办法]
第1理解是正确的.
实际上,在一些系统中并不实际区分二进制文件和文本文件.在磁盘上的存在形式都是二进制流,在内存中也都是二进制格式,
在读写过程中对它进行类型转换是为了体现给用户,程序员,看起来方便而已.
各种读写函数,只是为了方便和效率,并没有规定那个函数不能做什么,那些能做什么.因为这些函数都是通过封装read,write
来实现的.
[解决办法]
但是用文本文件和二进制文件的方式写入一个文件时,即使写的内容一样,但是文件的内容会有很小的差别,两种方式写入后的文件结果并不是完全一样的.
实际的读书都是按字节写入的.二进制操作文件也可以用其他的格式,如fgets等,不只是fread和fwrite