写入一段文本到文件
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> main()
{
FILE *pf;//文件指针
char path[] = "E:\\1.txt";
pf = fopen(path, "w");//打开一个写入的文件,有就覆盖,没有创建之 if (pf == NULL)
{
printf("文件打开失败");
}
else
{
printf("文件打开成功\n"); char str[] = "hello world, i love cpp";
int length;
length = strlen(str);//获取字符串的长度
int i; for (i = ;i < length;i++)
{
fputc(str[i], pf);//往一个文件写入字符
} fclose(pf);
} system("pause");
}
字符读取,字符串读取
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> main()
{
FILE *pf; pf = fopen("E:\\1.txt", "r"); if (pf == NULL)
{
printf("fail");
}
else
{
int size; while (!feof(pf))//字符读取
{
char ch = fgetc(pf);
putchar(ch);
} size = ftell(pf); printf("size=%d\n", size); printf("\n");
rewind(pf); char str[] = { };
while (fgets(str, , pf) != NULL)//字符串读取
{
puts(str);
} printf("size=%d\n", size); fclose(pf);
} system("pause");
}
字符移位加密
1 #define _CRT_SECURE_NO_WARNINGS
2
3 #include<stdio.h>
4 #include<stdlib.h>
5
6 void jia(int pass)
7 {
8 FILE *pfr;//读取1.txt
9 FILE *pfw;//写入1jia.txt
10
11 char pathr[100] = "E:\\1.txt";
12 char pathw[100] = "E:\\1jia.txt";
13
14 pfr = fopen(pathr, "r");//用读的模式打开被加密的文件
15 pfw = fopen(pathw, "w");//用写的模式打开要写入加密的文件
16
17 if (pfr == NULL || pfw == NULL)
18 {
19 printf("文件故障,加密失败");
20 return;
21 }
22
23 while (!feof(pfr))//一直读到要加密的文本的末尾
24 {
25 char ch = fgetc(pfr);
26 ch = ch + pass;//字符移位加密
27 fputc(ch, pfw);//写入文本
28 }
29
30 fclose(pfr);
31 }
32
33 void jie(int pass)
34 {
35 FILE *pfr;//读取1jia.txt
36 FILE *pfw;//写入1jie.txt
37
38 char pathr[100] = "E:\\1jia.txt";
39 char pathw[100] = "E:\\1jie.txt";
40
41 pfr = fopen(pathr, "r");//用读的模式打开加密以后的文件
42 pfw = fopen(pathw, "w");//用写的模式打开要写入解密的文件
43
44 if (pfr == NULL || pfw == NULL)
45 {
46 printf("文件故障,加密失败");
47 return;
48 }
49
50 while (!feof(pfr))//一直读到要解密的文本的末尾
51 {
52 char ch = fgetc(pfr);
53 ch = ch - pass;//字符移位加密
54 fputc(ch, pfw);//写入文本
55 }
56
57 fclose(pfr);
58 }
59
60 main()
61 {
62 int pass = 5;
63
64 jia(pass);
65
66 jie(pass);
67
68 system("pause");
69 }
字符异或加密
1 #define _CRT_SECURE_NO_WARNINGS
2
3 #include<stdio.h>
4 #include<stdlib.h>
5
6 void yjia(int pass)
7 {
8 FILE *pfr;//读取1.txt
9 FILE *pfw;//写入1jiay.txt
10
11 char pathr[100] = "E:\\1.txt";
12 char pathw[100] = "E:\\1jiay.txt";
13
14 pfr = fopen(pathr, "r");//用读的模式打开被加密的文件
15 pfw = fopen(pathw, "w");//用写的模式打开要写入加密的文件
16
17 if (pfr == NULL || pfw == NULL)
18 {
19 printf("文件故障,加密失败");
20 return;
21 }
22
23 while (!feof(pfr))//一直读到要加密的文本的末尾
24 {
25 char ch = fgetc(pfr);
26 ch = ch ^ pass;//异或加密
27 fputc(ch, pfw);//写入文本
28 }
29
30 fclose(pfr);
31 }
32
33 void yjie(int pass)
34 {
35 FILE *pfr;//读取1jiay.txt
36 FILE *pfw;//写入1jiey.txt
37
38 char pathr[100] = "E:\\1jiay.txt";
39 char pathw[100] = "E:\\1jiey.txt";
40
41 pfr = fopen(pathr, "r");//用读的模式打开加密以后的文件
42 pfw = fopen(pathw, "w");//用写的模式打开要写入解密的文件
43
44 if (pfr == NULL || pfw == NULL)
45 {
46 printf("文件故障,加密失败");
47 return;
48 }
49
50 while (!feof(pfr))//一直读到要解密的文本的末尾
51 {
52 char ch = fgetc(pfr);
53 ch = ch ^ pass;//异或加密
54 fputc(ch, pfw);//写入文本
55 }
56
57 fclose(pfr);
58 }
59
60 main()
61 {
62 int pass = 5;
63
64 yjia(pass);
65
66 yjie(pass);
67
68 system("pause");
69 }
打印汉字,必须要连着,否则会出现乱码
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> main()
{
char str[] = "我的"; printf("%c%c", str[], str[]);
//必须要连着,否则会出现乱码
printf("%c %c", str[], str[]); system("pause");
}
//一个汉字2个字节,加上'\0'有3个字节
//2个汉字4个字节,加上'\0'有5个字节
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> main()
{
printf("%d\n", sizeof("我"));
//一个汉字2个字节,加上'\0'有3个字节
printf("%d\n", sizeof("我是"));
//2个汉字4个字节,加上'\0'有5个字节 system("pause");
}
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> //feek可以移动到指定的位置进行读写
//移动到尾部进行写入,移动到尾部前面几个字节进行写入
main1()
{
FILE *pf = fopen("E:\\1.txt", "r+");//r为读和写而打开文本文件 if (pf == NULL)
{
printf("文件打开失败\n");
}
else
{
printf("文件打开成功\n"); fseek(pf, , SEEK_END);//移动文件指针末尾 fputs("hello", pf);//输出字符串 fflush(pf); fseek(pf, , SEEK_END);//往前移动5个字节 fputs("world", pf);//输出字符串 fclose(pf);
} system("pause");
} //读取后面几个字符
main2()
{
FILE *pf = fopen("E:\\1.txt", "r+");//r为读和写而打开文本文件 if (pf == NULL)
{
printf("文件打开失败\n");
}
else
{
printf("文件打开成功\n"); fseek(pf, -, SEEK_END);//往前移动5个字节 while (!feof(pf))
{
char ch = fgetc(pf);//获取一个字符
putchar(ch);
} fclose(pf);
} system("pause");
} //读取前面几个字符
main3()
{
FILE *pf = fopen("E:\\1.txt", "r+");//r为读和写而打开文本文件 if (pf == NULL)
{
printf("文件打开失败\n");
}
else
{
printf("文件打开成功\n"); fseek(pf, , SEEK_SET);//从文件开头+8的位置开始读取 while (!feof(pf))
{
char ch = fgetc(pf);//获取一个字符
putchar(ch);
} fclose(pf);
} system("pause");
} //修改前面几个字符
main4()
{
FILE *pf = fopen("E:\\1.txt", "r+");//r为读和写而打开文本文件 if (pf == NULL)
{
printf("文件打开失败\n");
}
else
{
printf("文件打开成功\n"); int i; for (i = ;i < ;i++)
{
fputc('', pf);
} printf("\n");
rewind(pf); while (!feof(pf))
{
char ch = fgetc(pf);
putchar(ch);
} fclose(pf);
} system("pause");
} //修改前面几个字符2
main5()
{
FILE *pf = fopen("E:\\1.txt", "r+");//r为读和写而打开文本文件 if (pf == NULL)
{
printf("文件打开失败\n");
}
else
{
printf("文件打开成功\n"); fseek(pf, , SEEK_SET); char ch; for (ch = '';ch <= '';ch++)
{
fputc(ch, pf);
} rewind(pf); while (!feof(pf))
{
char ch = fgetc(pf);
putchar(ch);
} fclose(pf);
} system("pause");
} //fseek修改二进制文件
main()
{
FILE *pf = fopen("E:\\1.txt", "wb+");//r为写而打开一个二进制文件 if (pf == NULL)
{
printf("文件打开失败\n");
}
else
{
printf("文件打开成功\n"); double db[] = { 1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10 }; fwrite(db, sizeof(double), , pf);//写入一片内存,每个元素8个字节,一共10个到文件 rewind(pf); double dbr[]; fread(dbr, sizeof(double), , pf);//读取二进制 int i;
for (i = ;i < ;i++)
{
printf("%f\n", dbr[i]);
} fclose(pf);
} system("pause");
}
打开文件,一定要关闭文件。
fclose有一个动作,就是将文件缓冲区的内容,写入到文本。如果程序意外关闭,没有调用fclose,文件数据丢失
r读,w写,+可读可写,b二进制,t就是文本
既没有b也没有t,不强调是二进制还是文本,普遍适用
fopen
//若文件不存在,则新建文件
//若文件存在,则文件长度清零,则该文件内容会消失
//wb只允许写数据
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> //若文件不存在,则新建文件
//若文件存在,则文件长度清零,则该文件内容会消失
//wb只允许写数据
main()
{
char path[] = "E:\\WB.txt"; FILE *pf = fopen(path, "wb");//按照写的方式打开文件 if (pf == NULL)
{
printf("fail");
}
else
{
printf("succes\n"); float fl[] = { 1.0,2.0,3.0,4.0,5.0 }; fwrite(fl, , , pf);//将数组这一片内存写入文件 rewind(pf);//移动指针到开头 float flx[] = { 0.0 }; int res = fread(flx, , , pf);//将文件读入内存 printf("%d\n", res); if (res != )
{
printf("fail");
}
else
{
printf("succes\n");
}
fclose(pf);//关闭文件指针
}
system("pause");
}
fopen
//若文件不存在,则新建文件
//若文件存在,则文件长度清零,则该文件内容会消失
//w+模式既能写也能读
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> //若文件不存在,则新建文件
//若文件存在,则文件长度清零,则该文件内容会消失
//w+模式既能写也能读
main()
{
char path[] = "E:\\WJ.txt"; FILE *pf = fopen(path, "w+");//按照w+写的方式打开文件 if (pf == NULL)
{
printf("fail");
}
else
{
printf("succes\n"); fputs("hello", pf);//写入 rewind(pf);//文件指针移动到开头 char ch = fgetc(pf);//从文件读取一个字符保存到ch
//fgetc如果执行成功,就会返回读取的字符 printf("%d\n", ch);//执行失败,返回-1 putchar(ch); putchar(ch); fclose(pf);//关闭文件指针
} system("pause");
}
fopen
r+打开可读写的文件,该文件必须存在,存在就可以读且写
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> //r+打开可读写的文件,该文件必须存在,存在就可以读且写
main()
{
char path[] = "E:\\Z.txt"; FILE *pf = fopen(path, "r+");//按照写的方式打开文件 if (pf == NULL)
{
printf("fail");
}
else
{
printf("succes\n"); while (!feof(pf))//判断文件是否到了末尾
{
char ch = fgetc(pf);//从文件读取一个字符保存到ch
putchar(ch);//输出这个字符
} int res = fputc('A', pf);//写入不会报错,但是写入会失败 printf("%d\n", res); if (res == -)
{
printf("fail");
}
else
{
printf("succes");
}
fclose(pf);//关闭文件指针
} system("pause");
}
fopen
w写
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> //若文件不存在,则新建文件
//若文件存在,则文件长度清零,则该文件内容会消失
//w模式只能写,不能读
main()
{
char path[] = "E:\\W.txt"; FILE *pf = fopen(path, "w");//按照写的方式打开文件 if (pf == NULL)
{
printf("fail");
}
else
{
printf("succes\n"); fputs("hello", pf);//写入 rewind(pf);//文件指针移动到开头 char ch = fgetc(pf);//从文件读取一个字符保存到ch
//fgetc如果执行成功,就会返回读取的字符 printf("%d\n", ch);//执行失败,返回-1 putchar(ch); putchar(ch); fclose(pf);//关闭文件指针
} system("pause");
}
fopen
r读
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> //r该文件必须存在,不存在打开失败
//打开成功,我们就可以进行读的操作
//进行写的操作的时候,不会提示错误,但是会操作失败
main()
{
char path[] = "E:\\X.txt"; FILE *pf = fopen(path, "r");//按照读的方式打开文件 if (pf == NULL)
{
printf("fail");
}
else
{
printf("succes\n"); while (!feof(pf))//判断文件是否到了末尾
{
char ch = fgetc(pf);//从文件读取一个字符保存到ch
putchar(ch);//输出这个字符
} int res = fputc('A', pf);//写入不会报错,但是写入会失败 printf("%d\n", res); if (res == -)
{
printf("fail");
}
else
{
printf("succes");
}
fclose(pf);//关闭文件指针
} system("pause");
}
例16.1
把从键盘输入的文本按原样输出到名为 file_a.dat 的文件,用字符@作为键盘输入结束标志。
(1)打开文件。
(2)从键盘输入一个字符。
(3)判断输入的字符是否是@。若是,结束循环,执行步骤(7)。
(4)把刚输入的字符输出到指定的文件中。
(5)从键盘输入一个字符。
(6)重复步骤(3)至(5)。
(7)关闭文件。
(8)程序结束。
#include<stdio.h>
#include<stdlib.h> main()
{
FILE * fpout;
char ch;
if ((fpout = fopen("file_a.dat", "w")) == NULL)
{
printf("Can't open this file!\n");
exit();
}
ch = getchar();
while (ch != '@')
{
fputc(ch, fpout);
ch = getchar();
}
fclose(fpout);
}
例16.2
把一个已存在磁盘上的 file_a.dat 文本文件中的内容原样输出到终端屏幕上。
(1)打开文件。
(2)从指定文件中读入一个字符。
(3)判断读入的是否是文件结束标志。若是,结束循环,执行步骤(7)。
(4)把刚输入的字符输出到终端屏幕。
(5)从文件中再读入一个字符。
(6)重复步骤(3)至(5)。
(7)关闭文件。
(8)程序结束。
#include<stdio.h>
#include<stdlib.h> main()
{
FILE * fpin;
char ch;
if ((fpin = fopen("file_a.dat", "r")) == NULL)
{
printf("Can't open this file!\n");
exit();
}
ch = fgetc(fpin);
while (ch != EOF)
{
putchar(ch);
ch = fgetc(fpin);
}
fclose(fpin);
}
123