C语言读取文件的方式

2018/03/22 C语言

标准文件读写之FILE结构操作

头文件

#include <stdio.h>

文件的打开

fopen(char *filename,char *type);

文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程序就可用此FILE指针来实现对指定文件的存取操作了。

FILE *fp;  
if((fp=fopen("test","w"))==NULL) {  
    printf("File cannot be opened/n");  
    exit();  
}  
else  
    printf("File opened for writing/n");  
……  
fclose(fp); 

文件的关闭

int fclose(FILE *stream); 

文件操作完成后,必须要用fclose()函数进行关闭,这是因为对打开的文件进行写入时,若文件缓冲区的空间未被写入的内容填满,这些内容不会写到打开的文件中去而丢失。只有对打开的文件进行关闭操作时,停留在文件缓冲区的内容才能写到该文件中去,从而使文件完整。再者一旦关闭了文件,该文件对应的FILE结构将被释放,从而使关闭的文件得到保护,因为这时对该文件的存取操作将不会进行。文件的关闭也意味着释放了该文件的缓冲区

if(fclose(fp)!=0) {
    printf("File cannot be closed/n");
    exit(1);
}   
else  
    printf("File is now closed/n");

文件的读写

读写文件中字符

int fgetc(FILE *stream);
int getchar(void);
int fputc(int ch,FILE *stream);
int putchar(int ch); 
int getc(FILE *stream); 
int putc(int ch,FILE *stream); 

在TC中,putc()等价于fputc(),getc()等价于fgetc()。putchar(c)相当于fputc(c, stdout);getchar()相当于fgetc(stdin)。

读写文件中字符串

char *fgets(char *string,int n,FILE *stream); 
char *gets(char *s); 
int fprintf(FILE *stream,char *format,variable-list); 
int fputs(char *string,FILE *stream);
int fscanf(FILE *stream,char *format,variable-list); 

fgets()函数将把由流指针指定的文件中n-1个字符,读到由指针string指向的字符数组中去,例如:fgets(buffer,9,fp); 将把fp指向的文件中的8个字符读到buffer内存区,buffer可以是定义的字符数组,也可以是动态分配的内存区。注意,fgets()函数读到’\n’就停止,而不管是否达到数目要求。同时在读取字符串的最后加上’\0’。 fgets()函数执行完以后,返回一个指向该串的指针。如果读到文件尾或出错,则均返回一个空指针NULL,所以要用feof()函数来测定是否到了文件尾或者是ferror()函数来测试是否出错。

#include "stdio.h"   
int main() {  
    FILE *fp;   
    char str[128];   
    if((fp=fopen("test.txt","r"))==NULL) {  
        printf("cannot open file/n"); exit(1);  
    }   
    while(!feof(fp)) {  
        if(fgets(str,128,fp)!=NULL)  
        printf("%s",str);  
    }  
    fclose(fp);  
}   

以上为读取test.txt文件中的第一行并显示出来。

文件的随机读写

移动文件指针

fseek(FILE *stream,long offset,int origin);

fseek()函数用于把文件指针以origin为起点移动offset个字节,其中origin指出的位置可有以下几种:

origin数值为0代表文件开头,为1代表文件指针当前位置,为2代表文件尾。

例如:fseek(fp,10L,0);把文件指针从文件开头移到第10字节处,由于offset参数要求是长整型数,故其数后带L。

非标准文件的读写

这类函数最早用于UNIX操作系统,ANSI标准未定义,但有时也经常用到,DOS 3.0以上版本支持这些函数。它们的头文件为io.h。

文件的打开和关闭

int open(char *filename, int access);
int close(int handle);

open表示按access的要求打开名为filename的文件,返回值为文件描述字。

close表示关闭文件描述字handle相连的文件。

文件的读写

int read(int handle, void *buf, int count);
int write(int handle, void *buf, int count);

read()函数从handle(文件描述字)相连的文件中,读取count个字节放到buf所指的缓冲区中,返回值为实际所读字节数,返回-1表示出错。返回0 表示文件结束。

write()函数把count个字节从buf指向的缓冲区写入与handle相连的文件中,返回值为实际写入的字节数。

随机定位函数

int lseek(int handle, long offset, int fromwhere); 

该函数对与handle相连的文件位置指针进行定位,功能用法和fseek函数相同。

参考

C语言文件读写操作总结

Search

    Table of Contents