文件操作总结

文件操作“打开”fopen
文件指针名=fopen(文件名,使用文件方式)

FILE *fp; 
fp=("file a","r"); 
意义:在当前目录下打开文件file a进行“读”操作,并使fp指向该文件。
FILE *fp 
fp=("c:\\test","rb") 
意义:打开C盘的根目录下的文件test, 这是一个二进制文件,只允许按二进制方式进行读操作

文件使用方式说明

r(read): 
w(write): 
a(append): 追加 
t(text): 文本文件,可省略不写 
b(banary): 二进制文件 

打开文件的程序段

if((fp=fopen("c:\\test","rb")==NULL)
{
printf("\n error on open c:\\test file!");
getch();   //从键盘输入一个字符,但不在屏幕上显示
exit(1);  //敲键后执行exit(1)退出程序
}

关闭函数 fclose

 fclose(文件指针);
 fclose(fp); 正常完成关闭文件操作时,fclose函数返回值为0

多种读写函数

头文件<stdio.h>
·字符读写函数 :fgetc和fputc 
·字符串读写函数:fgets和fputs 
·数据块读写函数:freed和fwrite 
·格式化读写函数:fscanf和fprinf

fgetc:字符变量=fgetc(文件指针)
注意:文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。

//例如ch=fgetc(fp);其意义是从打开的文件fp中读取一个字符并送入ch中。

//读入文件test.c,在屏幕上输出。
#include<stdio.h>
main()    //从文件中逐个读取字符,在屏幕上显示
{
FILE *fp;
char ch;
if((fp=fopen("test.c","rt"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
ch=fgetc(fp);
while (ch!=EOF)    //直到读取到文件的末尾结束(EOF)标志
{
putchar(ch);
ch=fgetc(fp);  //下一个字符
}
fclose(fp);
}

写字符函数fputc
fputc(字符量,文件指针); 把一个字符写入指定的文件中
注意:
1. 每写入一个字符,文件内部位置指针向后移动一个字节。
2. fputc函数有一个返回值,如写入成功则返回写入的字符, 否则返回一个EOF。可用此来判断写入是否成功。

//从键盘输入一行字符,写入一个文件, 再把该文件内容读出显示在屏幕上
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
main()
{
    FILE *fp;
    char ch;
    if ((fp = fopen("E:string", "wt+")) == NULL)
    {
        printf("Cannot open file strike any key exit!");
        getch();
        exit(1);
    }
    printf("input a string:\n");
    ch = getchar();  // 输入一个字符
    while (ch != '\n')  
    {
        fputc(ch, fp);   //字符写入到fp文件指针中
        ch = getchar();  //输入下一个字符    (循环结束即文件内部指针指向末尾)
    }
    rewind(fp);     //   文件内部位置指针移向头部
    ch = fgetc(fp);     
    while (ch != EOF)
    {                    
        putchar(ch);
        ch = fgetc(fp);    //依次读一个字符然后输出
    }
    printf("\n");
    fclose(fp);
}

读字符串函数fgets
fgets(字符数组名,n,文件指针);
fgets(str,n,fp) 表示:从fp所指的文件中读出n-1个字符送入字符数组str中;
注意:
1. 在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。
2. fgets函数也有返回值,其返回值是字符数组的首地址。

//从test.c文件中读入一个含10个字符的字符串
#include<stdio.h>
int main()
{
    FILE *fp;
    char str[11];
    if ((fp = fopen("test.c", "rt")) == NULL)
    {
        printf("不能打开文件");
        getch();
        exit(1);
    }
    fgets(str, 10, fp);
    printf("%s", str[11]);
    fclose(fp);
}

写字符串函数fputs
fputs(“aaaa“,fp); 意义:把字符串“aaaa”写入fp所指的文件之中。

#include<stdio.h>
int main()
{
    FILE *fp;
    char ch , str[20];
    if ((fp = fopen("test.c", "at+")) == NULL)
    {             //以追加读写文本文件的方式打开文件
        printf("不能打开文件");
        getch();
        exit(1);
    }
    printf("请输入一个字符串");
    scanf("%s", str);
    fputs(str, fp);
    rewind(fp);
    getchar(fp);
    while (ch != EOF)
    {
        putchar(fp);
        getchar(fp);
    }
    printf("\n");
    fclose(fp);
}

fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
其中buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。 size 表示数据块的字节数。count 表示要读写的数据块块数。fp 表示文件指针。

 //从键盘输入两个学生数据,写入一个文件中, 
 //再读出这两个学生的数据显示在屏幕上。
 #include<stdio.h>
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
FILE *fp;
char ch;
int i;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("\ninput data\n");
for(i=0;i<2;i++,pp++)
scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
pp=boya;
fwrite(pp,sizeof(struct stu),2,fp);
rewind(fp);
fread(qq,sizeof(struct stu),2,fp);
printf("\n\nname\tnumber age addr\n");
for(i=0;i<2;i++,qq++)
printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr);
fclose(fp);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值