头文件:#include
文件操作工具函数
相对路径转换函数:realpath
头文件:#include
设置文件当前指针:fseek
原型:int fseek(FILE *stream, long offset, int fromwhere)
功能:设置文件指针的位置。
参数:
offset:偏移量,以字节为单位正数表示正向偏移,负数表示负向偏移。
fromwhere:偏移起始位置
#define SEEK_SET 0 //文件头
#define SEEK_CUR 1 //当前位置
#define SEEK_END 2 //文件尾
例如
fseek(fp,56L,0); //把fp指针移动到从文件开头起始,往正方向的56个字节处;
fseek(fp,34L,1); //把fp指针移动到从当前位置起始,往正方向的34个字节处;
fseek(fp,-78L,2); //把fp指针移动到从结尾位置起始,往负方向的78个字节处。
读取文件
读取的文本文件:read.txt
test read txt admin
This is a read test.
文本文件的第三行有一个回车
读取一个字符函数:fgetc
函数原型:int fgetc(FILE *stream);
功能:从文件流steam中读取一个字符。
源码
static int Test_fgetc(int argc,char *argv[])
{
char ch = 0; //字符保存缓冲区
if(NULL == argv[1])
{
return -1;
}
char *real_path = realpath(argv[1],0); //相对路径转换绝对路径
FILE *fp = fopen(real_path,"r"); //打开文件
if(!fp)
{
printf("%s can not be opened.\n",argv[1]);
return -1;
}
while((ch = fgetc(fp))!=EOF) //判断读取的字符是否是文件结束符
{
putchar(ch); //输出字符
}
fclose(fp);
return 0;
}
运行结果
$ ./prj/project.o read.txt
test read txt admin
This is a read test.
$
读取一个字符串函数:fgets
函数原型:char *fgets(char *s, int size, FILE *stream);
该函数读到一个回车键就结束了,读取字符串的时候一定要注意读取的文件包含的回车键。
源码:
static int Test_fgets(int argc,char *argv[])
{
if(NULL == argv[1])
{
return -1;
}
char *real_path = realpath(argv[1],0);
FILE *fp = fopen(real_path,"r");
if(!fp)
{
printf("%s can not be opened.\n",argv[1]);
return -1;
}
fseek(fp,0L,SEEK_END); //定位到文件末尾
int flen = (int)ftell(fp); //获取得到文件大小
fseek(fp,0L,SEEK_SET);
char *chs = (char *)malloc(flen+1); //分配空间
if(chs == NULL)
{
fclose(fp);
return 0;
}
memset((void *)chs,0,flen+1);
fgets(chs,flen,fp); //由于读取的文件有两行因此读取两次结果
printf("%s",chs);
fgets(chs,flen,fp);
printf("%s",chs);
free(chs);
fclose(fp);
chs = NULL;
return 0;
}
执行结果
$ ./prj/project.o read.txt
test read txt admin
This is a read test.
$
格式化读取字符串函数:fscanf
函数原型:int fscanf(FILE *stream, const char *format, …);
该函数读到一个空格键就结束了,读取字符串的时候一定要注意读取的文件包含的空格键。该函数一般作为读取类似表格数值时使用。
1、作为读取函数
源码