C语言操作txt文件增删查改代码
功能需求:
使用C语言编程操作txt文件,功能包括增加、删除、查找和修改。
完整代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LENGTH 100 // 增加一行数据到文件中 void add_line_to_file(char *filename, char *line) { FILE *fp = fopen(filename, "a"); if (fp == NULL) { printf("Failed to open file %s\n", filename); return; } fprintf(fp, "%s\n", line); fclose(fp); } // 删除文件中指定的一行数据 void delete_line_from_file(char *filename, int line_number) { FILE *fp = fopen(filename, "r"); if (fp == NULL) { printf("Failed to open file %s\n", filename); return; } char temp_filename[] = "temp.txt"; FILE *temp_fp = fopen(temp_filename, "w"); if (temp_fp == NULL) { printf("Failed to create temp file\n"); fclose(fp); return; } char line[MAX_LINE_LENGTH]; int current_line_number = 1; while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) { if (current_line_number != line_number) { fprintf(temp_fp, "%s", line); } current_line_number++; } fclose(fp); fclose(temp_fp); remove(filename); rename(temp_filename, filename); } // 查找文件中指定的一行数据 void find_line_in_file(char *filename, char *search_string) { FILE *fp = fopen(filename, "r"); if (fp == NULL) { printf("Failed to open file %s\n", filename); return; } char line[MAX_LINE_LENGTH]; int current_line_number = 1; while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) { if (strstr(line, search_string) != NULL) { printf("Line %d: %s", current_line_number, line); } current_line_number++; } fclose(fp); } // 修改文件中指定的一行数据 void modify_line_in_file(char *filename, int line_number, char *new_line) { FILE *fp = fopen(filename, "r"); if (fp == NULL) { printf("Failed to open file %s\n", filename); return; } char temp_filename[] = "temp.txt"; FILE *temp_fp = fopen(temp_filename, "w"); if (temp_fp == NULL) { printf("Failed to create temp file\n"); fclose(fp); return; } char line[MAX_LINE_LENGTH]; int current_line_number = 1; while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) { if (current_line_number == line_number) { fprintf(temp_fp, "%s\n", new_line); } else { fprintf(temp_fp, "%s", line); } current_line_number++; } fclose(fp); fclose(temp_fp); remove(filename); rename(temp_filename, filename); } int main() { char filename[] = "data.txt"; add_line_to_file(filename, "John,25,Male"); add_line_to_file(filename, "Mary,30,Female"); add_line_to_file(filename, "Tom,20,Male"); printf("Original data:\n"); find_line_in_file(filename, ""); delete_line_from_file(filename, 2); printf("After deleting line 2:\n"); find_line_in_file(filename, ""); modify_line_in_file(filename, 1, "Mary,35,Female"); printf("After modifying line 1:\n"); find_line_in_file(filename, ""); return 0; }
代码实现分析:
这个例子中,我们使用了C标准库中的文件操作函数来操作txt文件。具体来说,我们使用了以下函数:
- `fopen`:打开文件,返回一个文件指针。
- `fclose`:关闭文件。
- `fprintf`:向文件中写入格式化的数据。
- `fgets`:从文件中读取一行数据。
- `strstr`:在字符串中查找指定的子字符串。
- `remove`:删除文件。
- `rename`:重命名文件。
在`add_line_to_file`函数中,我们使用了`fopen`函数以追加模式打开文件,然后使用`fprintf`函数向文件中写入一行数据,最后使用`fclose`函数关闭文件。
在`delete_line_from_file`函数中,我们首先使用`fopen`函数以只读模式打开文件,然后使用`fgets`函数逐行读取文件中的数据。如果当前行不是要删除的行,我们就使用`fprintf`函数将该行数据写入到一个临时文件中。最后,我们使用`remove`函数删除原始文件,使用`rename`函数将临时文件重命名为原始文件名,完成删除操作。
在`find_line_in_file`函数中,我们使用`fopen`函数以只读模式打开文件,然后使用`fgets`函数逐行读取文件中的数据。如果当前行包含指定的字符串,我们就使用`printf`函数打印出该行数据。
在`modify_line_in_file`函数中,我们首先使用`fopen`函数以只读模式打开文件,然后使用`fgets`函数逐行读取文件中的数据。如果当前行是要修改的行,我们就使用`fprintf`函数将新的数据写入到一个临时文件中。否则,我们就使用`fprintf`函数将该行数据写入到临时文件中。最后,我们使用`remove`函数删除原始文件,使用`rename`函数将临时文件重命名为原始文件名,完成修改操作。
需要注意的是,在实际应用中,我们需要考虑文件的大小、并发访问、错误处理等问题,以确保程序的正确性和稳定性。