操作C语言文件的读写
最编程
2024-08-13 10:25:05
...
C语言文件读写操作
需求:按照要求查找一个文本文件中的某一行,将该行文本保存到另一个文本文件中,并在原文件中删除该行
思路:首先获取该文件中文本的行数,再按照要求(行号或行首的编号)找到该行,并记录该行的行号,读取并保存到另一个文本文件中,最后就是删除原文件中的该行信息
C语言的文件操作函数中,并没有删除文件中某一行的函数,所以需要自己实现,实现思路如下:
首先用fgets函数将文件中的每行读出(要删除的那行除外,这就是为什么前面要获取行数),保存到一个动态申请的二维数组中str[len][255](len为总行数,255为每行最大的字符数)
最后将str中的字符串一行一行的写入到原来的文本文件中,首行用fopen(file, "w") , 以"W"的权限写入就覆盖掉了原来的信息,然后后面的其他行就以fopen(file, "a") ,”a“的权限添加到文件中
代码:
获取文件的文本行数:
int getlen(char const * file1) { FILE *fp = fopen(file1, "r"); char str[255]; int len = 0; while(fgets(str, 255, fp)) { len++; } fclose(fp); return len; }
找到要删除的行,并返回行号
int lineFind(char const * file1, const int id, char * targetline, int len) { FILE *fp = fopen(file1, "r"); char strLine[255]; char str[7]; int num; len = 0; int lineNum = 0; while(fgets(strLine, 255, fp)) { strncpy(str, strLine, 6); str[6] = '\0'; if(id == strToInt(str)) { lineNUme = len; strncpy(targetLine, strLine, 255); } len ++; } fclose(fp); return lineNum; }
id 为要删除行行首的编号,strToInt()函数是自己写的,将字符串数字转换成整数
将要删除的行保存到另一个文本文件中
void lineCopy(char const * file2, char * strLine) { FILE *fp = fopen(file2, "a"); fprintf(fp, "%s", strLine); fclose(fp); }
删除行
char * lineDelete(char const *file1, int len, int lineNum, char * src) { // 创建二维数组 char ** strget = (char ** )malloc(sizeof(char *) * len); int j; for(j=0;j<len;j++) { strget[j] = (char *)malloc(sizeof(char) * 255); } FILE *fp = fopen(file1, "r"); // 先获取到所有行的文本 int i=0; while(fgets(strget[i], 255, fp)) { i++; } fclose(fp); //先写入首行覆盖原来的信息 FILE *fp1 = fopen(file1, "w"); fprintf(fp1, "%s", strget[0]); fclose(fp1); // 再写入剩余的除删除行外的其他行 FILE *fp2 = fopen(file1, "a"); for(i=1;i<len;i++) { if(i == lineNUm) { strcpy(src, strget[i]); continue; } fprintf(fp1, "%s", strget[i]); } fclose(fp2); // 释放内存 for(i=0;i<len;i++) { free(strget[i]); } free(strget); return src; }
上一篇: 总结C语言文件的读写操作
下一篇: 深入剖析C语言中的FILE文件操作
推荐阅读
-
C语言内存管理的重要性
-
使用opencv3和C++编程语言实现简单目标跟踪的Tracker
-
实现纯前端下载PDF链接文件的解决方案,不进行预览操作
-
C语言编写的2048游戏实现
-
C语言实现2048游戏的完整代码
-
修改itunes备份路径的方法(奇奇怪怪的文件堆积C盘,别让文件成为最后的稻草哦)
-
什么是挂载,Linux挂载详解-纠正一个误区,并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。
-
如何在AIX中进行ISO文件的挂载操作
-
操作系统Linux下如何挂载img格式的镜像文件?
-
C语言编写的“猜数字“小游戏