C实现文件内部操作
来源:互联网 发布:最全在线网络理财投资 编辑:程序博客网 时间:2024/06/05 17:05
main.c
#include "file_op.h"void show_menu(){ printf("F : 显示前一行\n"); printf("B : 显示后一行\n"); printf("S : 保存\n"); printf("Q : 退出程序\n");}void init(char *file_name){ char cmd[20] = {'\0'}; FILE *fd = open_file(file_name); init_list(fd); fclose(fd); while (1) { show_menu(); printf("请输入你的选择: "); fgets(cmd, sizeof(cmd), stdin); if (strlen(cmd) != 2) { printf("您的输入有误\n"); continue; } if (cmd[0] == 'Q') break; switch (cmd[0]) { case 'F': show_pre_content(); break; case 'B': show_next_content(); break; case 'S': { char file_name[100] = { '0' }; printf("请输入要保存的文件名: "); scanf("%s", file_name); save_contents(file_name); } break; default: break; } } delete_list();}int main(int argc, char *argv[]){ assert(argc == 2); init(argv[1]); return 0;}
file_op.c
#include "file_op.h"#include <string.h>#include <stdlib.h>file_data *head = NULL;file_data *current = NULL;#define BUFFSIZE 1024FILE * open_file(char *file_name){ FILE *fd = fopen(file_name, "r"); assert(fd != NULL); return fd;}void init_list(FILE * fd){ file_data *printData; char buf[BUFFSIZE] = {'\0'}; int len = 0; while (!feof(fd)) { memset(buf, sizeof(buf), 0); if (fgets(buf, sizeof(buf), fd)) { file_data *data; assert(buf != NULL); data = (file_data *)malloc(sizeof(file_data)); assert(data != NULL); insert_node(data, buf); } } printData = head; while (1) { printf("%s\n", printData->content); printData = printData->next; if (printData == head) break; }}void insert_node(file_data *data, char *buf){ int len = strlen(buf); //这里+1,是为了忽略了末尾的\n data->content = (char *)malloc(len); memset(data->content, sizeof(data->content), 0); memcpy(data->content, buf, len); if (data->content[len - 1] == '\n') data->content[len - 1] = '\0'; if (head == NULL) { head = data; head->pre = head; head->next = head; current = head; } else { data->next = head; data->pre = head->pre; head->pre->next = data; head->pre = data; }}void delete_list(){ file_data *last_data = head->pre; file_data *node = head; file_data *tmp; while (1) { if (node == last_data) { free(last_data); last_data = NULL; break; } tmp = node; node = node->next; tmp->pre->next = node; node->pre = tmp->pre; free(tmp); tmp = NULL; }}void show_pre_content(){ if (current != head) { current = current->pre; printf("%s\n", current->content); } else { printf("已经是第一行数据\n"); }}void show_next_content(){ if (current->next != head) { current = current->next; printf("%s\n", current->content); } else { printf("已经是最后一行数据\n"); }}void save_contents(char *save_fila_name){ FILE *fd; file_data * data; int len = 0; int flag = 0; //是否保存完的标志 assert(save_fila_name != NULL); fd = fopen(save_fila_name, "w"); data = head->pre; while (1) { char *content; if (data == head) flag = 1; // len = strlen(data->content); content = (char *)malloc(len * sizeof(char) + 1); desc_content(content, data->content, len); printf("%s\n", content); fprintf(fd, "%s\n", content); free(content); content = NULL; data = data->pre; if (flag == 1) //保存完退出保存 break; } fclose(fd); printf("文件保存成功\n");}char * desc_content(char *dest, char *src, int len){ int i = 0; assert(src != NULL && dest != NULL); while (i < len) { dest[i] = src[len - i - 1]; i++; } dest[i] = '\0'; return dest;}
file_op.h
#ifndef __FILE_OP_H__#define __FILE_OP_H__#define _CRT_SECURE_NO_WARNINGS#include <assert.h>#include <stdio.h>typedef struct file_data_struct file_data;struct file_data_struct{ char *content; //存储每一行内容 file_data * pre; file_data * next;};//加载文件到链表系列函数FILE * open_file(char *file_name);void init_list(FILE * fd);void insert_node(file_data *data, char *buf);//释放链表内存void delete_list();//显示上一行下一行系列函数void show_pre_content();void show_next_content();//保存文件系列函数void save_contents(char *save_fila_name);char * desc_content(char *dest, char *src, int len);#endif // __FILE_OP__
0 0
- C实现文件内部操作
- ListView实现Item内部操作
- 左式堆(不完全操作)实现文件C语言
- C语言实现文件、文件夹的操作
- c语言实现读取ini文件操作
- Android :内部文件中写操作
- [C/C++]文件操作
- 文件操作工具类 内部文件 外部文件
- 内部排序算法的C/C++实现
- C实现一个检查点在多边形内部
- Objective-C ---KVO内部实现原理
- c语言实现最简单的写文件操作
- c语言以字符形式实现文件的读写操作
- 使用ICSharpCode.SharpZipLib-(C#)实现解压缩文件的操作类
- linux文件操作指令的c语言代码实现
- 文件操作--C 函数操作
- c文件操作
- C文件操作
- 关于静态代码域的相关知识
- zabbix3.0.4通过自定义shell脚本添加对关键日志文件的监控
- Git学习(廖雪峰的Git教程)笔记2
- 获取非内嵌style的样式
- S2-045 跨平台GUI Exp
- C实现文件内部操作
- Spring 知识点总结 之 事务管理
- 快速排序
- thinkphp网易云信短信接口核心代码
- wsdl文件用SoapUI快速创建WebService,CXF生成客户端代码
- Bootstrap 缩略图
- 2017年计划
- CCF-I'm stuck!(BFS)
- 腾讯云安全-云鼎实验室:黑客是如何实现数据库勒索的