文件基本操作

文件基本操作    
操作系统中对文件的操作主要包括:
打开、关闭、读、写、 定位等操作
所用到的库函数主要包括:
文件打开函数: fopen
文件关闭函数: fclose
字符读写函数: fgetc和fputc
字符串读写函数:fgets和fputs
数据块读写函数:freed和fwrite
格式化读写函数:fscanf和fprinf
随机读写函数: rewind 函数和fseek函数

文件的操作函数
文件的打开(fopen函数)
函数调用:
FILE *fp;
fp=fopen(文件名,使用文件方式);
①文件名:也就是准备访问的文件的名字;
②使用文件的方式(“读”还是“写”等);
③让哪一个指针变量指向被打开的文件。
文件使用方式     含   义
"r"   (只读)为输入打开一个文本文件
"w"   (只写)为输出打开一个文本文件
"a"   (追加)向文本文件尾增加数据
"rb"  (只读)为输入打开一个二进制文件
"wb"  (只写)为输出打开一个二进制文件
"ab"  (追加)向二进制文件尾增加数据
"r+"  (读写)为读/写打开一个文本文件
"w+"  (读写)为读/写建立一个新的文本文件
"a+"  (读写)为读/写打开一个文本文件
"rb+" (读写)为读/写打开一个二进制文件
"wb+" (读写)为读/写建立一个新的二进制文件
"ab+" (读写)为读/写打开一个二进制文件

一般缓冲文件操作有三个必需的步骤: 
       (1) 在使用文件前要调用打开函数将文件打开, 若打开失败,则返回一个空指针;若打开正           常,可以得到一个文件指针,并利用它继续对文件操作。 
       (2) 可调用各种有关函数,利用该指针对文件进行具体处理,一般要对文件进行读或写操作。
       (3) 在文件用完时,应及时调用关闭函数来关闭文件, 切断数据流,防止数据遗失或误操作           破坏文件内容。

文件打开的几个说明:
①凡用“r”打开一个文件时,该文件必须已经存
在,且只能从该文件读出
②用“w”打开的文件只能向该文件写入。若打开
的文件不存在,则以指定的文件名建立该文
件,若打开的文件已经存在,则将该文件删
去,重建一个新文件
③若要向一个已存在的文件追加新的信息,只能
用“a”方式打开文件
④ 在打开一个文件时,如果出错,fopen将返回
一个空指针值NULL。在程序中可以用这一信息
来判别是否完成打开文件的工作,并作相应的
处理。
文件关闭函数fclose文件一旦使用完毕,应用
关闭文件函数把文件关闭,以避免文件的数据
丢失等错误
调用的一般形式是:fclose (文件指针);
    例如:fclose (fp);
    正常完成关闭文件操作时,fclose函数返回
值为0
    如返回非零值则表示有错误发生
读写对文件的读和写是最常用的文件操作
    在C语言中提供了多种文件读写的函数:
字符读写函数:fgetc和fputc
以字符(字节)为单位的读写函数。每次
可从文件读出或向文件写入一个字符
字符串读写函数:fgets和fputs
数据块读写函数:freed和fwrite
格式化读写函数:fscanf和fprinf
    使用以上函数都要求包含头文件stdio.h


fscanf() 匹配符


文件链表综合练习
        《文件加密器》

习题答案
1、
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>


void code(char flag)
{
    FILE *fp = NULL;
    char *str,nam1[50],nam2[50];
    unsigned int password,size,i;
    if(flag==1)
    {
        printf("请输入要加密的文件地址\n");
    }
    else if(flag==2)
    {
        printf("请输入要解密的文件地址\n");
    }
    scanf("%s",nam1);
    fp=fopen(nam1,"rb");
    if(fp==NULL)
    {
        printf("文件打开失败\n");
        printf("回车继续\n");
         getch();
    }
    else
    {
        fseek(fp,0,2);
        size=ftell(fp);
        rewind(fp);
        printf("请输入目标文件地址\n");
        scanf("%s",nam2);
        printf("请输入密码\n");
        scanf("%d",&password);
        str=(char *)malloc(size);
        fread(str,size,1,fp);
        fclose(fp);
        for(i=0;i<size;i++)
        {
           
            if(flag==1)
            {
                *(str+i)+=password;
            }
            else if(flag==2)
            {
                *(str+i)-=password;
            }
        }
        fp=fopen(nam2,"wb+");
        fwrite(str,size,1,fp);
        fclose(fp);
        if(flag==1)
        {
            printf("恭喜!加密成功\n");
        }
        else if(flag==2)
        {
            printf("恭喜!解密成功\n");
        }
        printf("回车继续\n");
        }
}

void dis(void)
{    
    system("cls");
    printf("*****************************************************\n");
    printf("*******************按*1*加密文件*********************\n");
    printf("*******************按*2*解密文件*********************\n");
    printf("*******************按*0*退出程序*********************\n");
    printf("*****************************************************\n");
}

int main(void)
{
    while(1)
    {
        unsigned int select;
        dis();
        scanf("%d",&select);
        if(select==0)
        {
            break;
        }
        switch(select)
        {
            case 1:code(1);break;
            case 2:code(2);break;
            default:printf("输入错误\n");break;
        }
    }
}

原文地址:https://www.cnblogs.com/qinkai/p/2429597.html