codeblock图形界面编程(十)文件操作
打开我们的计算机,无论是花花绿绿的图片、动感激烈的视频或者是各种各样的资料、数据,要想在电脑中存储、复用,无不是以文件形式保存在计算机硬盘中。所以,应用程序设计中,文件操作是必不可少的,它可以让我们把目标内容、数据存储到计算机硬盘上,以供下次使用或者用于交流、传输或再加工等等,这样,即使我们的app停止了运行,或者在大型协作任务中退出了,数据仍然保留,下次我们可以再次从电脑中读取数据内容,继续工作,通过这些文件操作,使得我们实现了数据的持久化,信息的交流、存储或再加工就有了基础。
C语言的文件管理
文件指针
C编译器中,每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,通过一个FILE的指针来维护这个FILE结构的变量,实例如下:
FILE* pf;//文件指针变量
文件打开
pf建立了指针和文件的联系后,使用fopen函数来打开文件,fopen函数原型:
//打开文件函数:
FILE *fopen( const char *filename, const char *mode );
在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图:
文件关闭
利用fclose来关闭文件。和fclose函数原型为:
//关闭文件函数:
int fclose( FILE *stream );
文件读
我们使用文件的目的无外乎对文件的读和写,常用的函数有:
-
fgetc函数,函数原型:
int fgetc( FILE *stream );
该函数作用是从文件流或者标准输入流stdin(键盘)中读取一个字符。正常读取返回该字符的ASCII码。读取错误或者读取结束则会返回EOF,EOF是-1,因此其是用int类型返回值!
2 fgets() 获取一行,其原型定义为:
char *fgets(char *s, int size, FILE *stream);
fgets() 有三个参数:
FILE *stream 文件指针
int size 读取大小
char *s, 读出得数据存储指针,指向存储缓冲区,可以是字符数组名,也可以是指向字符数组的字符指针变量名
其功能是从 stream 流中读取 size 个字符存储到字符指针变量 s 所指向的内存空间。它的返回值是一个指针,指向字符串中第一个字符的地址。
文件写
和文件读对应,常用的文件写函数有:
-
fputc()函数用于将单个字符写入文件。它将一个字符输出到流。fputc()函数原型定义为:
int fputc(int c, FILE *stream)
-
fputs() 函数也是用来显示字符串的,它的原型是:
int fputs(const char *s, FILE *stream);
两个参数:
s 代表要输出的字符串的首地址,可以是字符数组名或字符指针变量名。
stream 表示输出流,可以是标准输出流 stdout,也可以是文件流
图形界面的文件操作管理
图形界面具有界面友好,直观和容易使用的特点,用户往往通过鼠标和图形窗口的方式来选择文件进行操作,例如windows的explorer,界面如下:
怎么实现昵?下面以codeblock20为例介绍
配置libcomdlg32.a库
在 Code::Blocks 20.03 中,要使用FileDialog(szFile))来图形化的打开文件对话框,需要comdlg32.a库的支持,配置方法如下:
1.选择Settings -> compiler
2.选择linker settings,选择add -> 浏览, D:\Program Files\CodeBlocks\MinGW\x86_64-w64-mingw32\lib找到libcomdlg32.a并添加,添加好如下图:
当然,具体目录地址需要根据你的codeblock安装地址选择即可。
系统功能的实现
char szFile[100] = {0};
if(FileDialog(szFile))
{
puts(szFile);
}
in = fopen( szFile, "r" );
if(in==NULL)
{
printf("open error\n");
return;
}
while(fgets(line_buff,sizeof(line_buff),in))//逐行循环读取文件,直到文件结束
{
//文件的数据处理操作
}
fclose(in); //使用完毕,关闭文件
至此,我们实现了图形界面下的文件打开、读取、操作和关闭的全流程。