open:
FILE * fopen(const char * path,const char * mode);第一个参数path表示要打开的文件路径,第二个参数mode表示要以什么样的方式打开,如果打开成功则会返回一个文件指针(指向当前打开文件的缓冲区)
以下是mode的可选值:
r:只读方式打开,如果打开文件不存在,不会新建;
w:只写,如果文件不存在会新建一个文件,如果文件存在则会将文件清空再写
a:只写,如果文件不存在会新建一个文件,如果文件存在则会在文件末尾追加。
以上几种mode所能实现的功能过于单一,所以fopen支持追加后缀的方式对fopen的功能进行扩展。比如wb表示以只读二进制的方式打开
以下是几种可选的后置
+:更新模式,可读可写
b:二进制方式打开;
x:独占方式打开 (也就是说这个文件被我打开后,其他程序就不能对它进行操作了)
getc()和putc()
int getc(FILE *stream):getc()的参数都为指向文件缓冲区的指针,从指定文件缓冲区中读一个字符
int putc(char c,FILE *stream):putc的参数分别为要写入的字符和指向写入目标文件缓冲区的指针
EOF:字符串用'\0'表示字符串结尾,文件自然也有自己的结束标志,而文件的结束标志就是EOF。
游标
游标是指当前在文件中什么位置进行操作;
fseek:
int fseek(FILE *stream, long offset, int fromwhere);第一个参数stream表示对那个文件的游标进行操作,第二个参数long表示偏移量,第三个参数表示偏移量的参照基准;总的来说就是将stream中的游标以fromwhere为基准偏移offset个单位,成功返回0,失败返回非0值不改变游标位置。
fromwhere的可选值有:
SEEK_SET:文件开头位置
SEEK_CUR:文件当前光标位置
SEEK_END:文件结尾位置
ftell:
long ftell(FILE *stream):用于得到文件位置指针当前位置相对于文件首的偏移字节数。
因为操作系统的不同在windows系统下ftell读换行符实际上是先读了一个'\r'再读一个'\n',在linux中则只会读一个'\n'所以就会导致以下情况:
假设一个文本文件内容如下:
void main()
{
FILE *fp=fopen(“demo.txt","r+");
while(getc(fp)!=EOF){}
long last=ftell(fp);
printf("%ld",last);
}
则在windows环境下last值为18,在linux环境下last的值为15。
ps:之所以这样是因为ftell是以二进制进行读取的,而在windows环境下二进制的换行符实际上是由'\r'和'\n'组成的