文件拷贝
(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;
}