哪个网站可以免费做简历,重庆网站建设冒号,凡客公司,永久免费域名注册网站来源#xff1a;黑马程序员
第157讲 C语言操作文件概述
读取文件#xff1a;输入流
写文件#xff1a;输出流
读写的方向判断取决与参照#xff0c;一般我们站在程序的角度判断读写方向。 第158讲 路径
基本概念
路径就是指文件在电脑中的位置#xff0c;eg#xf…来源黑马程序员
第157讲 C语言操作文件概述
读取文件输入流
写文件输出流
读写的方向判断取决与参照一般我们站在程序的角度判断读写方向。 第158讲 路径
基本概念
路径就是指文件在电脑中的位置egC:\Users\Administrator\Desktop
表示方式
①绝对路径
例如C:\Users\Administrator\Desktop
绝对路径以盘符作为起始标志除非认为改动位置是固定所以叫绝对路径。
②相对路径
例如aaa\a.txt
相对于当前项目而言的位置。
第159讲 转义字符
C语言中路径以字符串形式存在。
\在C语言中代表一个转义字符改变后面这个符号原本的含义代表字符串的开头或者结尾。
所以在代码中如果想要打印\和“需要先在前面加上转义字符。
正确打印当前文件位置的代码
#include stdio.hint main()
{char* path E:\\0_CC Projects\\C\\FilePath\\files\\file demo.txt;printf(%s\n, path);return 0;
}
注意点
文件路径的末尾必定是一个带有文件格式标识的文件名称例如a.txt!
第160讲 利用fgetc一次读一个字节
文件操作流程
①打开文件 fopen
②读数据 fgetc (file get char,一次读一个字节) fgets(file get string一次读一行) fread跨行处理
③关闭文件 fclose
函数介绍
fopen
函数原型:
FILE *fopen(const char *path, const char *mode);形参介绍
path 参数指定了要打开文件的路径和名称。
mode 参数指定了文件的打开模式如只读、只写、追加等。
mode 参数的一些常用值包括 一般视频、音频、图片的文件格式是二进制类型本节课操作文本文件。
作用拓展
使用 fopen 打开文件后可以通过一系列的输入/输出函数如 fread、fwrite、fprintf、fscanf、fgets、fputs 等对文件进行读写操作。完成文件操作后应使用 fclose 函数关闭文件以释放与 FILE 对象相关联的资源。
冷知识
部分C编译器中里面char *pathhello会报错“const char*类型不能用来初始化char*类型”解决方法也是队中多样的。
fgetc
函数原型
int __cdecl fgetc(_Inout_ FILE* _Stream);
形参介绍Stream 是指向 FILE 对象的指针该对象标识了要从中读取字符的文件流。
返回值读取成功则返回读取到的字符读不到就返回-1。
fclose
函数原型
int fclose(FILE* _Stream);
形参介绍Stream指向 FILE 对象的指针该对象标识了要关闭的文件流。这个 FILE 指针是通过之前对 fopen、freopen 或 fdopen 的调用获得的。
返回值如果文件成功关闭fclose 函数返回 0。
如果关闭文件时发生错误返回 EOF。EOF 是一个在 stdio.h 中定义的宏通常用于表示文件结束或错误条件。
操作实例
①在工程文件内新建一个文本文件随意写入一行字符。
②修改编码格式为ANSI步骤如下
1点击文件-另存为 2点击编码选择为ASNI少了这一步会输出中文乱码。 ③开始编程。
#include stdio.h
#include stdlib.hint main()
{char* path E:\\0_CC Projects\\C\\Fgetc\\files\\file demo.txt;FILE* file fopen(path, r);/*调试if (file NULL) {perror(Error opening file);return EXIT_FAILURE; }int c fgetc(file);if (c ! EOF) {printf(%c\n, c);}else {printf(No characters read or file is empty.\n);}fclose(file);return EXIT_SUCCESS; *//*待改进int c fgetc(file);printf(%c, c);c fgetc(file);printf(%c, c);c fgetc(file);printf(%c, c);c fgetc(file);printf(%d, c);fclose(file);*/int c;while ((cfgetc(file))!-1){printf(%c, c);}fclose(file);return 0;
}
输出结果 第161讲 利用fgets一次读一行数据
fgets函数介绍
函数原型
char *fgets(char *str, int n, FILE *stream);形参介绍
str指向用于存储读取到的字符串的字符数组。
n指定要读取的最大字符数包括最后的空字符\0。如果读取的字符数不包括最后的空字符达到了n-1函数将停止读取并在字符串末尾添加一个空字符\0。
stream指向 FILE 对象的指针该对象标识了要从中读取数据的输入流。
返回值
如果成功读取到字符串fgets 函数返回 str 的地址。
如果读取失败例如遇到文件结束符或发生错误则返回 NULL。
如果在读取任何字符之前已经到达文件末尾则 str 的内容保持不变并返回一个空指针。
使用示例
#include stdio.hint main()
{char* path E:\\0_CC Projects\\C\\Fgets\\poetry\\静夜思.txt;FILE* file fopen(path, r);char buffer[1024] ;char* str;while ((str fgets(buffer, 1024, file))!NULL) {printf(%s\n, str);}fclose(file);return 0;
}
输出结果 注意事项
①fgets每次读取一行数据以换行符按下回车键或者叫\n为准。
②如果读不到了就会返回NULL。
第162讲 利用fread一次读多个字节
fread函数介绍
函数原型
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);形参介绍
void *ptr指向用于存储读取数据的缓冲区的指针。
size_t size每个数据项的大小以字节为单位。
size_t nmemb要读取的数据项的最大数量。
FILE *stream指向 FILE 对象的指针该对象标识了要从中读取数据的输入流。
返回值
成功时fread 返回实际读取的元素数量这可能会小于请求的数量 nmemb尤其是在遇到文件结束EOF或发生错误时。
如果发生错误或到达文件末尾前没有读取任何数据则返回 0。
代码示例
#include stdio.hint main()
{char* path E:\\0_CC Projects\\C\\Fread\\poetry\\静夜思.txt;FILE* file fopen(path,r);char buff[1024];int num fread(buff, 1, 1024, file); //获取文件中的元素数量,24个汉字字符包括标点*2byte3个换行符*1byte51byteprintf(%d\n, num);printf(%s,buff);fclose(file);return 0;
}
输出结果 注意细节
①Windows64位系统中英文字母占用1个字节中文字符占用2个字节。
②fread在读取时每次尽可能会把数组装满返回当前读取到的有效字节数
假设文件为100个字节数组长度为30那么接下来读取的流程为 第一次读取前面30个字节,把数组给装满,函数返回30 第二次读取后面30个字节,把数组给装满,函数返回30 第三次读取后面30个字节,把数组给装满,函数返回30 第四次读取剩余的10个字节,会把数据放在数组当中,函数返回10 第五次:没有数据可以被读取了,函数返回0。
所以可以利用这个特性改进代码 char* path E:\\0_CC Projects\\C\\Fread\\poetry\\静夜思.txt;FILE* file fopen(path,r);char buff[100];int num ; while ((num fread(buff, 1, 100, file)) ! 0){for (int i 0; i num ; i) {printf(%c,buff[i]); //注意%c后不能有其他东西}}fclose(file);return 0;
while循环内判断是否到达到达文件末尾for循环遍历字符数组打印。
输出结果 第163讲 三种写出数据的方式
基本概念
写出数据就是把程序中的数据写到本地文件中永久存储。
书写步骤
1 打开文件 fopen
2 写数据 fputc fputs fwrite
3 关闭通道 fclose
文件读写模式 fputc
函数原型
int fputc(int _Character, FILE* _Stream);
形参介绍_Character是想要写入的字符的ASCII值_Stream是指向目标文件的指针。
返回值如果写入成功函数返回写入的字符的ASCII码值如果写入失败例如由于磁盘空间不足或文件是只读的则返回EOF在stdio.h中定义的宏通常表示-1。
fputs
函数原型
int fputs(char const* _Buffer,FILE* _Stream);
形参介绍:_Buffer是指向要写入文件的字符串的指针;_Stream是指向 FILE 对象的指针该对象标识了要写入的文件流。
返回值写出成功返回非负数建议忽略
fwrite
函数原型
fwrite( void const* _Buffer, size_t _ElementSize, size_t _ElementCount,FILE* _Stream);
形参介绍
_Buffer这是一个指向数据的指针这些数据将被写入到文件中。注意由于这是一个 void 类型的指针所以它可以指向任何类型的数据。但是你需要确保传递给 _ElementSize 的值正确反映了每个数据元素的大小。
_ElementSize这是每个数据元素的大小以字节为单位。它告诉 fwrite 每个数据项占用的字节数。
_ElementCount这是要写入文件的数据元素的数量。fwrite 会尝试写入指定数量的数据元素到文件中。
_Stream这是一个指向 FILE 对象的指针该对象标识了要写入数据的文件流。
返回值fwrite 函数返回成功写入的数据元素的数量。注意这个数量可能小于我们请求的 _ElementCount特别是当文件系统的空间不足或发生其他错误时。如果发生错误我们可以检查 ferror 函数的返回值来确定是否发生了错误。
代码示例
#include stdio.hint main()
{char* path E:\\0_CC Projects\\C\\FileWrite\\Myfiles\\myfile.txt;FILE* filefopen(path, w);//ASCII值a-97int cfputc(97,file);printf(%c\n, c);char* str \n银瓶乍破水浆迸;int nfputs(str,file);printf(%d\n, n);char message[20] \n铁骑突出刀枪鸣;int numfwrite(message,1,17,file);printf(%d\n, num);fclose(file);return 0;
}
输出结果 文件里面的现状 第164讲 多种读写模式
fopen的小细节
fopen(path,w);如果要写出的文件不存在编译器可以创建文件但必须保证前面的文件夹是存在着的。如果文件已经存在会把原文件清空。
fopen(path,a);aappend追加写出
fopen的一些其他模式 第165讲 拷贝文件
纯文本文件在打开数据源时可以使用r、w、a模式通俗地讲windows系统中的记事本可以打开地文件就叫做纯文本文件例如存储文字地txt、md文件、歌词文件lrc文件等。
代码示例
#include stdio.hint main()
{//打开数据源char* path D:\\readme.txt;FILE* fScource fopen(path,r);//复制文件路径char* newpath E:\\0_CC Projects\\C\\FileCopy\\Container\\copy.txt;FILE* fCopy fopen(newpath, w);//利用循环读取数据char arr[1024];int n;while ((nfread(arr,1,1024, fScource))!0){fwrite(arr,1,n, fCopy);}fclose(fScource);fclose(fCopy);return 0;
}