文件基本操作
操作系统中对文件的操作主要包括:
打开、关闭、读、写、 定位等操作
所用到的库函数主要包括:
文件打开函数: 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;
}
}
}