29、文件操作--顺序文件的写操作

在C中,文件的输入与输出有4种方式
1、字符输入输出
2、字符串输入输出
3、格式化输入输出
4、数据库输入输出

文件打开采用函数fopen(),声明格式如下:

FILE *fopen(const *filename, const *mode);

这里写图片描述
注意:文件操作完成后必须要关闭,否则会造成数据丢失。关闭函数是 fclose(),声明形式为:fclose(FILE *fp)

例1:新建一个文件,为 test1.txt, 存放在 D:\test\file_operate 目录下

#include<stdio.h>
void main()
{
    FILE * fp;  //定义文件指针
    fp=fopen("D://test//file_operate//testfile.txt","w"); //以写的方式打开文件
    //fp=fopen("D:\test\file_operate\testfile.txt","w"); //这种格式在 VS2012中打不开
    if(fp==NULL)
    {
        printf("File Not created!");
    }
    else
    {
        printf("File created!\n");
        fclose(fp);
    }
}

这里写图片描述

顺序文件的写操作

1、基于字符的写文本文件操作
  字符的输出函数是 fputc(),声明格式是:
  int fputc(char c, FILE *fp);
  参数 c 是要写入文件的字符变量,fp 是已经打开的文件中指针,函数返回值为整型数值。如果成功将 c 写入,函数返回值是 c,如果不能成功写入文件,函数返回值是 EOF。EOF 表示文件结尾。
 
例2:将用户输入的字符写入文件

// 例:将用户输入的字符写入文件
#include<stdio.h>
#include <cstdlib>
void main()
{
    FILE * fp;  //定义文件指针
    char c;
    int i;
    fp=fopen("D://test//file_operate//test1.txt","w"); //以写的方式打开文件
    if(fp==NULL)
    {   // 如果打开不成功,输出错误信息后退出程序
        printf("File Not created!");
        exit(0); //
    }
    else
    {
        printf("Please input the chars\n");
        for (i=0;i<10;i++)
        {
           scanf("%c",&c);
           fputc(c,fp); //将输入的字符存放到文件中
        }
        fclose(fp);
    }
}

这里写图片描述

2、基于字符串的写文本文件操作

  写字符串的函数是 fputs(),声明格式是:
  int fputs(char *str, FILE *fp);
  参数 str 可以是一个字符串、一个字符数组、一个指向字符串的指针。fp 是文件指针,函数 fputs() 的返回值是整型数据,如果文件写入成功,它将返回最后写入文件的那个字符,否则返回值为 EOF。
 
例3:将用户输入的一个字符串写入文件

#include<stdio.h>
#include <cstdlib>

void main()
{
    FILE * fp;  //定义文件指针
    char ch[80];
    fp=fopen("D://test//file_operate//String.txt","w"); //以写的方式打开文件
    if(fp==NULL)
    {   // 如果打开不成功,输出错误信息后退出程序
        printf("File Not created!");
        exit(0); //
    }
    else
    {
        printf("Please input the chars\n");
        gets(ch);
        fputs(ch,fp);
        fclose(fp);
    }
}

这里写图片描述

3、格式化写文本文件操作

  格式化写文本文件的函数是 fprintf(),声明格式是:
  int fprintf(FILE *fp,格式字符串,参数1,参数2,…);
  fprintf()的第一个参数是文件指针,后面参数的含义与 printf()函数的相对应函数相类似。fprintf()的作用是把格式字符串所指定的输出信息输出到文件 fp所指定的文件中去。fprintf()的返回值是整型数据,表示写入文件的字节数,如果写操作发生错误时,返回值为负值。
 
例4:将用户输入的一个字符串写入文件中,采用格式写入的方式。

#include<stdio.h>
#include <cstdlib>

void main()
{
    FILE * fp;  //定义文件指针
    char ch[80];
    fp=fopen("D://test//file_operate//String.txt","w"); //以写的方式打开文件
    if(fp==NULL)
    {   // 如果打开不成功,输出错误信息后退出程序
        printf("File Not created!");
        exit(0); //
    }
    else
    {
        printf("Please input the chars\n");
        gets(ch);
        fprintf(fp,"The string is: %s",ch);
        fclose(fp);
    }
}

这里写图片描述

4、写数据块

   前面几种写文件的方式,都是将一个一个的变量写入到文件中去。除了写变量的方式以外,还可以以数据块为单位来写文件。
  这种方式写文件,实际上是将内存中的数据直接写到文件中去,因此,必须要指明从内存区的什么位置开始写,写多少数据,每个数据占用字节数等。把数据块写入文件的函数是:
  unsigned fwrite(void *buffer,int size,int n,FILE *fp);
  这个函数有 4 个参数,buffer 是要写入文件的数据的内存地址;size 是数据类型的大小;n 是要写多少个指定类型的数据;fp 是文件指针。函数的返回值是实际写入文件的数据的个数,有可能等于 n,也可能不等。如果在写文件过程中发生错误,写入操作就会终止,实际写入的数据个数也就会小于 n。
  
例5:将用户输入的一个字符串写入文件中,存放指定大小的数据块。

#include<stdio.h>
#define nsize 10

void main()
{
    FILE * fp;  //定义文件指针
    char ch[80];
    fp=fopen("D://test//file_operate//String.txt","w"); //以写的方式打开文件
    if(fp==NULL)
    {   // 如果打开不成功,输出错误信息后退出程序
        printf("File open Error!");
        return; //
    }
    else
    {
        printf("Please input the chars\n");
        gets(ch);
        fwrite(ch,sizeof(char),nsize,fp);
        fclose(fp);
    }
}

这里写图片描述
注意:如果输入的数据,小于nsize,文件中可能会出现一部分乱码。

这里写图片描述 

例6:将用户输入的若干行字符串存放在文件中。

// 将用户输入的若干行字符串存放在文件中
#include<stdio.h>
#include<string.h>
#define nsize 10

void main()
{
    FILE * fp;  //定义文件指针
    char ch[80];
    fp=fopen("D://test//file_operate//String.txt","w"); //以写的方式打开文件
    if(fp==NULL)
    {   // 如果打开不成功,输出错误信息后退出程序
        printf("File open Error!");
        return; //
    }
    else
    {
        printf("Please input the chars\n");
        while(strlen(gets(ch))>0)
        {
            fwrite(ch,sizeof(char),nsize,fp);
            putc('\n',fp);
        }

        fclose(fp);
    }
}

注意:运行时要跳出 while 循环时,不输入字符串而直接回车,这时 ch 的长度为 0,也就是两个连续的回车,可结束循环。

这里写图片描述

5、写二进制文件
   写二进制文件与文本文件的方式类似,不同的是只需要将文件打开方式改为二进制文件打开方式即可,例如“wb”,“ab”等。二进制文件主要用于存放各类二进制数据。
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值