C语言在Windows系统上按当前年月日备份文件的实现

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

c语言实现在windows系统上按当前年月日备份文件,可执行文件后跟一个原文件名实现备份

回答:

在Windows系统上使用C语言实现按当前年月日备份文件的功能,可以通过以下步骤来完成:

  1. 获取当前系统日期。
  2. 构造备份文件名。
  3. 复制原文件到备份文件。

以下是一个示例代码,展示了如何实现这个功能:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>

void get_current_date(char *date_str, size_t size) {
    time_t t = time(NULL);
    struct tm tm = *localtime(&t);
    snprintf(date_str, size, "%04d%02d%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
}

int copy_file(const char *src, const char *dest) {
    BOOL success = CopyFile(src, dest, FALSE);
    return success ? 0 : -1;
}

int main(int argc, char *argv[]) {
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
        return 1;
    }

    const char *original_filename = argv[1];
    char date_str[9]; // YYYYMMDD format
    get_current_date(date_str, sizeof(date_str));

    char backup_filename[MAX_PATH];
    snprintf(backup_filename, sizeof(backup_filename), "%s_%s", date_str, original_filename);

    if (copy_file(original_filename, backup_filename) == 0) {
        printf("Backup successful: %s\n", backup_filename);
    } else {
        fprintf(stderr, "Failed to backup file: %s\n", original_filename);
        return 1;
    }

    return 0;
}

代码说明:

  1. 获取当前日期

    • get_current_date 函数使用 timelocaltime 获取当前系统时间,并格式化为 YYYYMMDD 字符串。
  2. 复制文件

    • copy_file 函数使用 Windows API CopyFile 进行文件复制。
  3. 主函数

    • 检查命令行参数,确保提供了原文件名。
    • 调用 get_current_date 获取当前日期。
    • 构造备份文件名,格式为 YYYYMMDD_原文件名
    • 调用 copy_file 进行文件复制,并输出结果。

编译和运行:

  1. 将上述代码保存为 backup.c
  2. 使用以下命令编译代码(假设你使用的是 MinGW 编译器):
    gcc -o backup backup.c
    
  3. 运行可执行文件,并提供要备份的文件名:
    backup example.txt
    

这样,程序会在当前目录下创建一个名为 YYYYMMDD_example.txt 的备份文件,其中 YYYYMMDD 是当前的年月日。