使用文件的方式共有12种,下面给出了它们的符号和意义。
文件使用方式 意 义
“rt” 只读打开一个文本文件,只允许读数据
“wt” 只写打开或建立一个文本文件,只允许写数据
“at” 追加打开一个文本文件,并在文件末尾写数据
“rb” 只读打开一个二进制文件,只允许读数据
“wb” 只写打开或建立一个二进制文件,只允许写数据
“ab” 追加打开一个二进制文件,并在文件末尾写数据
“rt+” 读写打开一个文本文件,允许读和写
“wt+” 读写打开或建立一个文本文件,允许读写
“at+” 读写打开一个文本文件,允许读,或在文件末追加数 据
“rb+” 读写打开一个二进制文件,允许读和写
“wb+” 读写打开或建立一个二进制文件,允许读和写
“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
对于文件使用方式有以下几点说明:
1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写
简单样例代码:
#include <stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char ch;
scanf("%c", &ch);
//打开
/*
带后缀+则都可以为读写;带后缀b全变二进制文件;
r,只读,文本,不存在则出错;
w,只写,文本,不存在则新建文件;
a,尾部追加,文本,不存在则出错;
*/
//顺序写
if ((fp=fopen("test.txt","w+"))==NULL)
{
printf("文件写未打开\n");
exit(0);
}
while (ch != '0')//遇到0,回车结束
{
fputc(ch, fp);//写
ch = getchar();
}
//关闭
fclose(fp);//用一次就要关一次!连着下面用会出错的
printf("文件已关闭\n");
//顺序读
if ((fp = fopen("test.txt", "r+")) == NULL)//fopen("test","r+")返回值是指向文件的指针
{
printf("文件读未打开\n");
exit(0);
}
while (!feof(fp))
{
ch = fgetc(fp);//读
putchar(ch);//显示
}
//关闭
fclose(fp);
printf("文件已关闭\n");
return 0;
}
feof(file stream )文件指针到达文件末尾
!feof(fp) 表示没有到达末尾
注意:这个末尾是最后一个字符的下一个位置
在C语言中提供了多种文件读写的函数:
·字符读写函数 :fgetc和fputc
·字符串读写函数:fgets和fputs
·数据块读写函数:freed和fwrite
·格式化读写函数:fscanf和fprinf
字符读写函数fgetc和fputc
一、读字符函数fgetc
fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为: 字符变量=fgetc(文件指针); 例如:ch=fgetc(fp);其意义是从打开的文件fp中读取一个字符并送入ch中。
二、写字符函数fputc
fputc函数的功能是把一个字符写入指定的文件中,函数调用的 形式为: fputc(字符量,文件指针); 其中,待写入的字符量可以是字符常量或变量,例如:fputc('a',fp);其意义是把字符a写入fp所指向的文件中。
字符串读写函数fgets和fputs
一、读字符串函数fgets
函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志' '。例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。
二、写字符串函数fputs
fputs函数的功能是向指定的文件写入一个字符串,其调用形式为: fputs(字符串,文件指针) 其中字符串可以是字符串常量,也可以是字符数组名, 或指针 变量,例如:fputs(“abcd“,fp);其意义是把字符串“abcd”写入fp所指的文件之中。
/*创建时间:2017年3月2日,20:22:25,“数据结构.c”*/
#include<stdio.h>
void readtxt()
{
int i = 0, j = 0;
int a[100];
FILE *fp;
if ((fp = fopen("in.txt", "rt")) == NULL)//从和.cpp在同一个文件夹下的“in.txt”的文件进行读取
{
printf("error!\n");
getch();
exit(1);
}
while (!feof(fp))
{
fscanf(fp, "%d", &a[i]); i++;//读取并放在数组里。比如txt里存的是“0 1 2 3”【最后一位不能是空格】
}
for (j = 0; j < i; j++) printf("%d ", a[j]);//从数组输出。
fclose(fp);
}
void main()
{
readtxt();
}