IO实现文件拷贝,验证登录, 判断两个文件是否相同

文件拷贝

(1)fscanf和fprintf实现

 #include <stdio.h>                                                            
 
 int main(int argc, const char *argv[])
 {
     if(argc < 3){
         printf("请输入需要拷贝的文件名和拷贝后的文件名\n");
         return -1;
     }
     //以读的权限打开拷贝文件
     FILE* fp = fopen(argv[1], "r");
     if(NULL == fp){
         perror("fopen");
         return -1;
     }
     //以写的权限创建拷贝文件,并写入数据
     FILE* fp1 = fopen(argv[2], "w");
     if(NULL == fp1){
         perror("fopen");
         return -1;
     }
     char buf;
     while(fscanf(fp, "%c", &buf) != EOF){  //直到拷贝文件读取完
         fprintf(fp1, "%c", buf);   //每读取一个字节就往新文件中写入一个字节
     }
 
     //关闭文件
     fclose(fp);
     fclose(fp1);
 
     return 0;
 }
                                                                               

(2)fgetc和fputc

#include <stdio.h>

int main(int argc, const char *argv[])
{
    if(argc < 3){
        printf("请输入需要拷贝的文件名和拷贝后的文件名\n");
        return -1;
    }
    //以读的权限打开拷贝文件
    FILE* fp1 = fopen(argv[1], "r");
    if(NULL == fp1){
        perror("fopen");
        return -1;
    }
    //以写的权限创建新文件,并写入数据
    FILE* fp2 = fopen(argv[2], "w");
    if(NULL == fp2){
        perror("fopen");
        return -1;
    }

    char buf;
    while((buf =fgetc(fp1)) != EOF){
        fputc(buf, fp2);
    }

    fclose(fp1);
    fclose(fp2);
    return 0;
}                                                               

 (3)  fgets和fputs

 #include <stdio.h>
 
 int main(int argc, const char *argv[])
 {
     if(argc < 3){
         printf("请输入需要拷贝的文件名和拷贝后的文件名\n");
         return -1;
     }
     //以读的权限打开拷贝文件
     FILE* fp1 = fopen(argv[1], "r");
     if(NULL == fp1){
         perror("fopen");
         return -1;
     }
     //以写的权限创建新文件,并写入数据
     FILE* fp2 = fopen(argv[2], "w");
     if(NULL == fp2){
         perror("fopen");
         return -1;
     }
 
     char buf[20];
     while(fgets(buf, sizeof(buf), fp1) != NULL){                 
         fputs(buf, fp2);
     }
 
     fclose(fp1);
     fclose(fp2);
     return 0;
 }
                                                                  

(4)  fwrite和fread

#include <stdio.h>

int main(int argc, const char *argv[])
{
    if(argc < 3){
        printf("请输入需要拷贝的文件名和拷贝后的文件名\n");
        return -1;
    }
    //以读的权限打开拷贝文件
    FILE* fp1 = fopen(argv[1], "r");
    if(NULL == fp1){
        perror("fopen");
        return -1;
    }
    //以写的权限创建新文件,并写入数据
    FILE* fp2 = fopen(argv[2], "w");
    if(NULL == fp2){
        perror("fopen");
        return -1;
    }

    /*
    char buf;
    //以1为单位,每次读取sizeof(char)个数据
    while(fread(&buf, 1, sizeof(char), fp1) != 0){
        //以buf为整体,共sizeof(char)个数据,每个数据占1个字节
        fwrite(&buf, 1, sizeof(char), fp2); 
    }
    */

    char buf[32];                                                          
    size_t res;   //获取read成功读取到的个数
    while((res = fread(buf, 1, sizeof(buf), fp1)) != 0){
        //以buf为整体,res个数据,每个数据占1个字节
        fwrite(buf, 1, res, fp2);
    }

    fclose(fp1);
    fclose(fp2);
    return 0;
}

文件比较

输入任意两个文件,判断这两个文件的内容是否完全相同。

#include <stdio.h>

//使用main函数传入文件名
int main(int argc, const char *argv[])
{
    if(argc < 3){
        printf("请输入两个文件名\n");
        return -1;
    }

    //以读的权限打开两个文件
    FILE* fp1 = fopen(argv[1], "r");
    if(NULL == fp1){
        perror("fopen");
        return -1;
    }
    FILE* fp2 = fopen(argv[2], "r");
    if(NULL == fp1){
        perror("fopen");
        return -1;
    }

    char buf1, buf2;
    int flag = 1;   //标志位 
    while( (buf1= fgetc(fp1)) == (buf2 = fgetc(fp2))){  //相等继续比较
        if(buf1 == EOF){
            printf("%s 和 %s 相同\n", argv[1], argv[2]);
            flag = 0;
            break;
        }
        //if(buf1 != buf2){
        //  flag = 0;
        //  printf("%s 和 %s 不相同\n", argv[1], argv[2]);
        //  break;
        //}
    }
    //if(buf1 != EOF && buf2 == EOF)    printf("%s 和 %s 不相同\n", argv[1], argv[2]);
    //if(buf2 != EOF && buf1 == EOF)        printf("%s 和 %s 不相同\n", argv[1], argv[2]);
    if(flag)     printf("%s 和 %s 不相同\n", argv[1], argv[2]);                                    
    return 0;
}
                                                                                                   

账户密码验证

若usr.txt中存储一个账户密码。格式,第一行是账户,第二行是密码,格式如下

admin

12345

要求:

从终端输入账户密码,与文件中的账户密码比较。

若账户名错误:账户不存在

若密码错误:密码错误

若账户密码均正确:登录成功

#include <stdio.h>                                                        
#include <string.h>

int main(int argc, const char *argv[])
{
    char user_input[20], passwd_input[20];
    char user[20], passwd[20];
    puts("请输入用户名");
    gets(user_input);
    //以读权限打开用户密码文件
    FILE* fp = fopen("./usr.txt", "r");
    if(NULL == fp){
        perror("fopen");
        return -1;
    }

    //获取文件中的用户名
    fscanf(fp, "%s", user);

    //比较输入的用户名正确
    if(!strcmp(user, user_input)){
        puts("请输入密码");
        gets(passwd_input);
        //获取文件中的用户名
        fseek(fp, 1, SEEK_CUR);  //从用户名末尾偏移到密码开头,在获取
        fscanf(fp, "%s", passwd);
        //比较输入的密码是否正确
        if(!strcmp(passwd, passwd_input))
            printf("登陆成功\n");
        else
            printf("密码错误\n");
    }else
        printf("用户名不存在\n");


    return 0;
}
                                                                          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值