c语言文件操作

c语言的文件操作

一.文件处理步骤
(1)声明一个FILE*类型的变量
(2)打开文件:调用fopen()函数将文件指针与这个文件相连
(3)文件处理
(4)关闭文件:调用fclose()函数

二.打开与关闭文件
FILE * fopen(const char * path,const char * mode);
(1)该函数有返回值。若打开失败会返回一个NULL的FILE指针。因此常常在fopen后加错误判断处理。

if ((fp = fopen("abc.txt", "r")) == NULL){
    printf("File open error!\n");
    exit(0);
}

(2)第一个参数是文件的路径及文件名,第二个参数表示进行什么操作

使用方式含义
“r” /”rb”打开文本文件/二进制文件 进行只读
“w”/”wb”建立新的文本文件/二进制文件 进行只写
“a”/”ab”打开文本文件/二进制文件 进行追加
“r+”/”rb+”打开文本文件/二进制文件 进行读写
“w+”/”wb+”建立新的文本文件/二进制文件 进行读写
“a+”/”ab+”打开文本文件/二进制文件 进行读写或追加

(3)打开文件时注意以下规则:
①如果读文件的话,文件必须存在否则会出错。写文件的话文件可以不存在
②以w方式写文件,文件如果存在,会将源文件删去重新建一个新的;文件如果不存在,正好按指定的名字建立一个新的文件。
③若不想在写文件时把原有文件的内容给删了,应该用a的方式写文件。
④文件同时读写使用r+,w+,a+
三.关闭文件
fclose (文件指针)
该函数将返回一个整数,若为0表示正常关闭文件,否则表示无法正常关闭文件,所以关闭文件时也要有一条条件判断。
四.文件读写
C语言标准库stdio.h中提供的文件读写函数:

  • fgetc() 调用形式ch = fgetc(文件指针) 作用是从文件中读一个字符到ch
    函数返回一个整形值,EOF是-1。
    注意:fgetc在读到有效的字符时,会向后移动指针,若读到文件末尾,则会读到EOF
  • fputc() 调用形式 fputc(ch, 文件指针) 作用是将一个字符写到文件上,
    函数返回值:写文件成功返回ch 失败返回EOF
  • feof() 调用形式:feof(fp) 检测文件指针所指的位置是否到了文件末尾

    /*复制数据,从文件1读取,写入文件2*/
    while(! feof(fp1))
    {
    ch = fgetc(fp1);
    if (ch != EOF) fputc(ch, fp2);
    }
  • fgets() 调用形式fgets(s, n, fp) s为字符数组名或字符指针,n是指定读入的字符个数,fp为文件指针。注意:函数被调用时,最多读取n-1个字符,当函数读取的字符达到n-1个或者接收到换行符或收到文件末尾EOF,将在字符串末尾自动添加一个’\0’
    函数返回值:成功返回读取的字符串,失败返回空指针
  • fputs() 调用形式fputs(s, fp) 向文本文件写入一个字符串
    函数返回值:成功返回所写的最后一个字符,失败返回EOF

  • fscanf() fprintf()
    调用格式:fscanf(文件指针,格式字符串,输入表)
    fprintf(文件指针,格式字符串,输出表)
    五.二进制文件操作
    对于二进制文件,第一步是打开文件的时候要建立二进制进行读写的方式加个b。
    二进制文件常用下面的函数操作:
    fread(buffer, size, count, fp);
    fwrite(buffer, size, count, fp);
    fread与fwrite用于读写数据块,可用来读一组数据,如一个数组元素,一个结构变量的值等。buffer表示一个指针,存放输入数据的首地址。size表示数据块的字节数,count表示要读写的数据块数目,fp表示文件指针。

/* 
 *编程实现以二进制方式读写用户信息文件f12-5.dat,
 *将5位用户信息(用户名和密码,密码要求经过例12-2的encrypt()函数加密)写入文件,
 *然后读出所有用户信息显示到屏幕。 
 */
#include <stdio.h>
#include <string.h>
#include<process.h>
#define SIZE 5  /*用户个数*/
struct sysuser{ /*用户信息结构体*/
      char username[20];
      char password[8];
};
void encrypt(char *pwd);
int main(void)
{
   FILE *fp;   /*1.定义文件指针*/
       int i;  
       struct sysuser u[SIZE],su[SIZE],*pu=u,*psu=su;

       /*2.打开文件,建立二进制文件进行读/写方式*/
       if((fp=fopen("f12-5.dat","wb+")) == NULL){
            printf("File open error!\n");
            exit(0);
        }
        /*3.输入SIZE个用户信息,并对密码加密,保存到结构体数组u */
        for(i=0;i<SIZE;i++,pu++){
            printf("Enter %i th sysuser(name password):",i);
            scanf("%s%s",pu->username,pu->password);  /*输入用户名和密码*/
            encrypt(pu->password);    /*调用加密算法对密码进行加密处理*/
        }
        pu=u;
        fwrite(pu,sizeof(struct sysuser),SIZE,fp);/*写入二进制文件*/
        rewind(fp);   /*将指针重新定位到文件首*/
    fread(psu,sizeof(struct sysuser),SIZE,fp);/*读取SIZE条数据到psu指向的结构数组*/
    for(i=0;i<SIZE;i++,psu++)
    printf("%s\t%s\n", psu->username, psu->password);
    /*关闭文件*/
    if(fclose(fp)){
        printf("Can not close the file!\n");
        exit(0);
    }  
    return 0;
}
/*加密函数,对pwd进行加密处理*/
void encrypt(char *pwd)
{  
    int i;
    /*与15异或,实现低四位取反,高四位保持不变*/
    for(i=0;i<strlen(pwd);i++) pwd[i] = pwd[i]^15;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值