1.文件的分类 :文件分为二进制文件和文本文件
首先,所有的数据在内存中都是以二进制形式存在的.只是存二进制之前的状态有所不同
二进制文件就是在内存中什么样子,在文件中就是什么样子,例如数字在内存中以二进制存储,如果将他写进文件里就是以二进制形式放进了外存,也就是所谓的文件,但是咱们电脑上文件的打开方式比较单一,大多数情况下会出现乱码,因为打开方式不对.或者说不同的打开方式读取内存中二进制码的方式不同,二进制文件就是直接将内存中的二进制码读出来以二进制的方式放在文件里.并且以特定的方式打开看到的就是二进制序列.也就是二进制文件.
文本文件就是:假如把写入内存的文件用记事本打开,因为记事本在读取是会将存入二进制序列当成assic码,然后翻译assic码.翻译后的内容就会被写进文件里.记事本等这种打开方式用assic码的和内存中的二进制进行比较翻译.
再说说存储方式
数字再内存中以二进制形式存在,字符以assic码形式存在,如果要将一个数字写进文件里,用记事本打开会出现乱码,因为数字存的是他的二进制,记事本读取时会把他当成assic码,然后翻译出来.字符本身就是以assic码形式存的,所以记事本打开的文件就是字符了,如果要把数字写进文件里就需要对数字进行转换将数字转换成字符.
文件中的读写函数
功能 | 函数名 | 适用于 |
字符输入函数 | fgetc | 所有输入流 |
字符输出函数 | fputc | 所有输出流 |
文本行输入函数 | fgets | 所有输入流 |
文本行输出函数 | fputs | 所有输出流 |
格式化输入函数 | fscanf | 所有输入流 |
格式化输出函数 | fprintf | 所有输出流 |
二进制输入 | fread | 文件 |
二进制输出 | fwrite | 文件 |
输入字符串的函数 | sprintf | 字符串 |
在字符串中读取字符 | sscanf | 字符串 |
文件使用方式 | 含义 | 如果指定的文件不存在 |
"r"(只读) | 为了输入数据打开一个已存在的文件 | 出错 |
"w"(只写) | 为了输出文件打开一个文本文件 | 建立一个新的文件 |
"a"(追加) | 向文本文件尾添加数据 | 出错 |
"rb"(只读) | 为了输入数据打开一个二进制文件 | 出错 |
"wb"(只写) | 为了输出数据打开一个二进制文件 | 建立一个新的文件 |
"ab"(追加) | 向一个二进制文件末尾添加数据 | 出错 |
fputc(char,流)将字符char写进指定的流里并且每次只写一个字符.
fgetc(流)从指定的流里读取字符,该函数以无符号 char 强制转换为 int 的形式返回读取的字符,%c打印就行..如果到达文件末尾或发生读错误,则返回 EOF。
这里添加一个判断函数是读完文件里的内容导致返回还是因为读取错误而返回的函数
feof()是检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0,,参数就是流.
fputs(一个字符串(指针类型),流)将字符串写进流里
fgetc(str,n,流)从指定的流中读取最多n-1个字符放在str字符串里.字符串最后一位放\0.
fprintf(流," %d",n)和printf写在显示器上一样,只是printf默认为标准输入流,第一个参数就省略了""里的内容会被写进指定的流中
fscanf(流," %d",&n)和scanf一样格式化读取,只是fscanf会指定流
sizet_t fread(void*ptr,size,count,文件流)读取文件流中count个元素,一个元素size大小.放在ptr中,返回值是成功读取的元素个数.
size_t fwrite(void*ptr,size,count,文件流)将ptr中的数据写count个在文件里,返回值为成功写入的个数.
涉及到文件里指针位置
int fsee件函数ck(文件流,m数字,n位置)将指针指向离n位置的m个位置
件函数位置有SEEK_SET(文件开头)SEEK_CUR(当前位置)SEEK_END(文件末尾)
long int ftell(文件流),返回指针相对于起始位置的偏移量.