1. Description
在桌面上创建一个txt文件,输入一些文本内容,我们的任务是把文本内容打印出来。
在编程之前,关于一些函数的定义我们需要了解下。
fopen
fopen的函数原型为: FILE *fopen(const char *filename, const char *mode);其功能是使用给定的模式 mode 打开 filename 所指向的文件。文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL,并把错误代码存在 error 中。该函数位于C 标准库<stdio.h>中。 [1]
fseek
int fseek(FILE stream, long offset, int fromwhere);函数设置文件指针stream的位置。
如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset取值大于等于2102410241024,即long的正数范围2G),则不改变stream指向的位置,函数返回一个非0值。
fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。
ftell
函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。
该函数对大于231-1文件,即:2.1G以上的文件操作时可能出错。
rewind
C 程序中的库函数,功能是将文件内部的指针重新指向一个流的开头。
fclose
fclose是一个函数名,功能是关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。
函数原型:int fclose( FILE *fp );
返回值:如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。(如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。)扫描二维码关注公众号,回复: 11696125 查看本文章
2. Code&Debug
使用的IDE是Viusal Studio 2019,创建一个空项目的控制台,然后创建一个头文件main.h。
//main.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
再创建一个源文件main.c开始编程。
//mian.c
#include"main.h"
int main(void)
{
//打开文件
FILE *pfile = fopen("C:/Users/0xFingerprint/Desktop/me.txt", "rb");
if (pfile == NULL) {
printf("open file failed!\n");
exit(0);
}
//读取文件长度,读完后把文件指针复位到开头
fseek(pfile,0, SEEK_END);
int file_length = ftell(pfile);
rewind(pfile);
//申请一段内存空间用来放文件中的文本内容,并置零
int text_length = file_length * sizeof(char) + 1;
char* text_buffer = (char*)malloc(text_length);
memset(text_buffer, 0, text_length);
//把文件文本内容读到申请的内存空间中
int read_length = fread(text_buffer, 1, file_length, pfile);
if (read_length != file_length) {
printf("read file failed!\n");
exit(0);
}
//打印文件文本内容,释放申请的内存空间,关闭文件流
printf(text_buffer);
free(text_buffer);
fclose(pfile);
}
然后点击生成会出现报错'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
。
我们打开项目属性,然后找到预处理器定义编辑添加_CRT_SECURE_NO_WARNINGS
即可。