C语言操作txt文件增删查改代码

C语言操作txt文件增删查改代码

C实例qingyu2023-06-02 15:13:42656A+A-

  功能需求:

  使用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`函数将临时文件重命名为原始文件名,完成修改操作。

  需要注意的是,在实际应用中,我们需要考虑文件的大小、并发访问、错误处理等问题,以确保程序的正确性和稳定性。

点击这里复制本文地址 默伴百科
qrcode

默伴生活 © All Rights Reserved.  Copyright Your WebSite.Some Rights Reserved.闽ICP备18012015号-4
Powered by Z-BlogPHP
联系我们| 关于我们| 留言建议| 网站管理