C语言文件的打开、关闭、读写

文章目录

        • 文件指针
        • 重定向
        • 文本文件和二进制文件
            • 文本文件
            • 二进制文件
          • 打开文件
          • 模式
          • 关闭文件
        • 从命令行获取文件名
        • 字符的输入、输出
        • 行的输入、输出
        • 文件定位

文件指针

FILE *fp1, *fp2;

重定向

通常我们强制程序从文件读入而不是从键盘获得输入,方法是在命令行中放上文件的名字,并在前面加上字符<:

demo:<in.dat   //输入重定向
demo:>out.dat  //输出重定向
demo: < in.dat > out.dat

文本文件和二进制文件

文本文件

字节表示字符,人民可以检查或编辑文件。
特性:文本文件分为若干行。
文本文件可以包含一个特殊的“文件末尾”标记。

二进制文件

字节不一定表示字符,字节组还可以表示其他类型的数据,比如整数和浮点数。

在无法确定文件是文本形式还是二进制形式时,安全的做法是把文件假定为二进制文件。

打开文件
FILE *fopen(const char * restrict filename, const char * restrict mode);

fopen函数返回一个文件指针。

fp = fopen("in.dat","r");

当无法打开文件时,fopen函数会返回空指针。

模式

C语言文件的打开、关闭、读写_第1张图片
C语言文件的打开、关闭、读写_第2张图片

关闭文件
fclose(fp);

从命令行获取文件名

int main(int argc, char *argv[]){
     
}
demo name.dat dates.dat

argc是命令行参数的数量,argv是指向参数字符串的指针数组。argv[0]指向程序的名字,argv[1]指向字符串"name.dat",argv[2]指向字符串"dates.dat".

详情参考C语言main函数的两个参数(int argc和char *argv[ ])

字符的输入、输出

输出函数

int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c);

输入函数

int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar(void);
int ungetc(int c,FILE *stream);

行的输入、输出

输出函数

int fputs(const char *restrict s,FILE *restrict stream);
int puts(const char *s);

输入函数

char *fgets(char * restrict s, int n,FILE *restrict stream);
char *gets(char *s);

文件定位

int fseek(FILE *stream,long int offset,int whence);
long int ftell(FILE *stream);
void rewind(FILE *stream);

fseek函数改变与第一个参数(文件指针)相关的文件位置。第三个参数说明新位置是根据文件的起始处、当前位置还是文件末尾来计算。

SEEK_SET  文件的起始处
SEEK_CUR  文件的当前位置
SEEK_END  文件的末尾处

第二个参数是(可能为负的)字节计数。

fseek(fp,0L,SEEK_SET); //move to beginning of file
fseek(fp,0L,SEEK_END); //move to end of file
fseek(fp,-10L,SEEK_CUR); //moves back 10 bytes

文件定位函数最适合二进制流。

ftell函数以长整数返回当前文件位置。

rewind函数会把文件的位置设置在起始处。rewind不返回值。

你可能感兴趣的:(C语言,指针,字符串)