C语言基础之文件
来源:互联网 发布:2017陌陌站街营销软件 编辑:程序博客网 时间:2024/06/05 20:10
文件
C程序在打开一个文件时,系统会自动在内存中开辟一个“文件信息区”,用来存放这些与打开文件的有关信息。这些信息保存在一个结构体变量中,该结构是有系统定义的,取名为FILE.FILE是在头文件stdio.h
中定义的一个结构体数据类型。
对每一个要进行操作的文件,都需要定义一个指向FILE类型结构体的指针变量,该指针称为文件类型指针(文件指针),定义的方法如下:
FILE *指针变量;
如:
FILE *fp;
一个文件指针只能指向一个文件。
例:将九九乘法表打印在一个文件中
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
FILE *fp; //定义一个指向FILE类型结构体变量的指针
fp=fopen("cfb.txt","w"); //打开文件 ,w表示只写
if(fp==NULL) //如果打开不成功,fopen函数将返回一个空指针NULL,这时应及时终止程序
{
printf("can not open cfb.txt!\n");
exit(0);
}
for(i=1;i<=9;i++) //若打开成功,则向文件cfb.txt输入九九乘法表
{
for(j=1;j<=i;j++)
{
fprintf(fp,"%d x %d=%2d",j,i,i*j); //fprintf函数的功能是向文件输出格式化的数据
if(j==i)
fprinf(fp,"\n");
else
fprintf(fp,"\t");
}
}
fclose(fp); //关闭文件指针
return 0;
}
fp=fopen("文件名","文件使用方式");
注:1.文件名可以是一个字符串,表示要访问的文件,改字符串应该指明文件的路径,如果不指明,改文件的位置应该是在当前目录下。写路径时应用分隔符/或者\\.
2.''w''代表只写。这是如果指定的文职不存在改文件,系统将建立一个新的文件,如果已经存在该文件,系统则从文件的起始位置重新写入数据,原有内容够被更新。
文件使用方式
字符串方式文件读写函数
while(fgets(ch,50,in)!=NULL) //从源文件中读取一行
fputs(ch,out); //写入该行到目标文件
写字符串函数 fputs()
fputs(str,fp);
说明:str可以是字符串常量,指向字符串的指针或者存放字符串的字符数组名。它有一个返回值,若成功,返回0,失败为EOF.
读字符串函数fgets()
fgets(str,n,fp);
说明:
(1)str用来存放字符串的存储单元起始地址,可以是字符数组名或者指向足够空间的字符指针。n是用来指定读取字符的个数,其中包括字符串的结束符在内,所以读取的有效字符为n-1个。
(2)函数从fp所指的文件中读取n-1个字符,放入以str为起始地址的存储单元内。但是遇到换行符或者结束符EOF时将结束本次读取操作,读取的字符(包括换行符)存到str所指向的字符串中,并在末尾追加一个字符串结束标志\0
(3)读取成功,返回就是字符串的起始地址,失败则返回NULL。
格式化文件读写函数
格式化写文件函数fprintf()
fprinf(文件指针,"格式控制",输出列表);
说明:将输出项按指定的格式写入到文件指针变量所指向的文件中,格式控制与输出列表同printf函数一样
如:fprintf(fp,"%d%d",100,200);
执行的结果是将100和200两个整数存放到fp所指向的文件中,当文件之后怎为stdout时,等价于printf.
格式化读文件函数fscanf()
fscanf(文件指针,"格式控制",输入列表);
说明:
(1)从文件指针所指的文件中按指定的格式读取数据到输入列表中的变量中。
如: fscanf(fp,"%d%d",&x,&y);
(2)当文件指针为stdin时,即从标准输入文件(键盘)读取一个整数赋给整型变x.
(3)fscanf(fp,"%s",str); 从文本文件中读取字符串时,遇到空格,跳格符,回车符都认为是字符串结束符。
数据块读写函数
数据块读写函数fwrite()和fread()一般用于二进制文件的输入和输出
写数据块函数fwrite()
fwrite(buffer,size,count,fp)
说明:
(1)buffer是待写入的数据块的存储单元的起始位置,size表示每个数据项的字节数,count表示数据项的个数,fp是文件指针,指向待写入的文件。所以该函数的作用是将
buffer所指的内存区的count个长度为size的数据项写入到fp所指向的文件中。
(2)如果调用成功,返回值为count,即实际写入文件中的数据项数,失败则返回0.
读数据块函数fread()
fread(buffer,size,count,fp)
说明:用来从指定文件读一个数据块存放到指定的存储单元内,其数据块的大小是由数据项的大小(字节数)和数据项的项数决定的。
(1)buffer是用于存放数据块的存储单元的起始地址,size表示每个数据项的字节数,count表示数据项的个数,fp是文件指针,指向待读取的文件
(2)如果调用成功,返回值为count,即实际写入文件中的数据项数,失败则返回0.
其他相关函数
1.整数方式文件读写函数getw()和putw() (大多数编译系统都提供这两个函数)
putw(10,fp); =int n=10; fwrite(&n,4,1,fp)
它的作用是将整数10输出到fp指向的文件
i=getw(fp);
它的作用是从磁盘文件读一个整数到内存,赋值给整型变量i.
也可以自定义这两个函数:
int putw(int a,FILE*fp)
{
int i;
char *s;
s=&a;
for(i=0;i<4;i++) //一般是一个机器字(word)存放一个int类型的数据,所以在32位的C编译器中,int类型的整数将占4个字节。
putc(s[i],fp);
return a;
}
int getw(FILE*fp)
{
char *s;
int a,i;
s=&a;
for(i=0;i<4;i++)
s[i]=getc(fp);
return a;
}
顺序读写和随机读写
1.随机定位函数fseek()
fseek函数可以实现将文件的位置指针移到指定位置的功能,其调用格式为:
fseek(文件指针,位移量,起始位置);
说明:
(1)起始位置包括:
文件首,用符号常量 SEEK_SET 表示,在stdio.h中定义#defineSEEK_SET 0
文件当前位置,用符号常量 SEEK_CUR 表示,在stdio.h中定义#define SEEK_SET 1
文件尾,用符号常量 SEEK_END 表示,在stdio.h中定义#define SEEK_SET 2
(2)位移量是文件位置指针移到的字节数,必须是长整型数,用常量表示时要加后缀L
(3)调用成功,返回值为0,失败为-1
(4)对二进制文件能准确移动,对文本文件遇到换行符会发生混乱
例:
fseek(fp,20L,1); // 执行介绍过是将文件的位置指针移到距当前读写位置20个字节处
2.文件头定位函数rewind()
rewind()的功能是使文件的位置指针重新回到文件的开头,没有返回值。
调用格式为:
rewind(fp);
3.求当前读写位置函数ftell()
ftell()函数的作用是得到文件的当前位置。用相对于文件开头的位移量(字节数)表示。
调用格式:ftell(fp);
说明:如果函数调用成功,则返回文件的当前位置,改数值为长整型,失败则返回-1L。
- C语言基础之文件
- 基础之C语言
- C语言读写文件大全 之 基础篇
- ios开发之c语言基础-函数(主函数文件)
- C语言基础之文件、宏定义规则
- C语言 之 文件
- C语言基础-头文件
- c语言基础回顾-文件
- C语言基础--读文件
- C语言基础之《数据类型》
- C语言基础之sizeof
- C语言基础之数组
- 嵌入式基础之----C语言
- C语言基础之《数据类型》
- c语言基础之指针
- C语言基础之数组
- c语言之基础-1
- c语言之基础-2
- 日志库EasyLogging++学习系列(2)—— 日志级别
- 工具类之NetworkUtils
- 关于杀毒
- SQL Server Management Studio无法记住密码
- 运算符、流程控制——全选
- C语言基础之文件
- ARP协议
- 面向对象软件工程方法学与传统方法学的异同
- 子进程的异步等待方式
- thread43
- day01
- 把内容写到剪贴板 模拟键盘按钮Ctrl+V Alt+O
- easyui可编辑表格编辑器设置值
- day02