Windows系统下使用系统下使用C语言编写单线程的文件备份程序语言编写单线程的文件备份程序
主要介绍了Windows系统下使用C语言编写单线程的文件备份程序,文中给出了实现的几个关键代码片段,剩下的
只要套上main和线程调用的相关函数即可,非常详细,需要的朋友可以参考下
写在最前方写在最前方
源路径:即 From-Path,你准备要备份的资料
目的路径: 即 To-Path,你准备要存储备份的资料的地方
稍微回想一下,上一次写的代码,本次的任务是遍历目录及其子目录,那么这回要干的就是将上次遍历过的数据,挪一下窝,
到我们想要他们去的位置。
这涉及到两个操作,遍历 和 拷贝,前一个动作我们在上一回已经实现了,只需做小小的改动,就能够使用。后一个动作也是
需要靠 Windows API来完成,至于哪些,稍后再提。
现在先让我们完成一个魔法,3, 2, 1!:
do{
puts("-------------------------------------------------");
fprintf(stdout, "The Default Path is : %s ", DEFAULT_TO_PATH);
fprintf(stdout, "Now The Path is : %s ", get_backup_topath());
puts("-------------------------------------------------");
puts("That is a System Back Up Software for Windows! ");
puts("List of the software function : ");
puts("1. Back Up ");
puts("2. Set Back Up TO-PATH ");
puts("3. Show TO-PATH History");
puts("4. Read Me ");
puts("5. Exit ");
puts("-------------------------------------------------");
对界面稍微有了一些改动。
新增了第三行和第四行的 系统默认目的路径和当前使用的目的路径。
新增了倒数第四行的查看目的路径历史纪录的功能。
在main函数外头需要 extern DEFAULT_TO_PATH;因为引用了setPath.c里的一个全局变量。
写在中间写在中间
我们曾经提到要让函数的功能更加清晰,为了达到这个目的,应该把可能用到的一些原生库函数包裹一下,让可能发生的错误
尽量掌握在我们自己的手里
安全函数安全函数
新建 safeFunc.h safeFunc.c
考虑一下我们需要包裹的函数: malloc, free, fopen 三个库函数。
为了不让后方的多线程实现产生更多的以后,不单独使用全局错误输出。
让我来将他们实现一下
我不会省略一些看似不必要的东西,例如注释,而是完整的呈现出来,如果觉得篇幅过长,可以选择跳跃的阅读。
魔法来了,3, 2, 1!
#include <stdio.h> /* size_t */
#include <stdlib.h>
#include <setjmp.h>
#define TRY_TIMES 3
typedef struct _input_para{
char * file; /* 待打开或创建的文件名 */
char * mode; /* 打开的模式 */
}params;
jmp_buf malc_jmp; /*Malloc_s*/
jmp_buf fopn_jmp; /*Fopen*/
/**
* @version 1.0 2015/10/01
* @author wushengixin
* @param ... 参看结构体说明
可传入任意的个数的,形式为 .file = "xxx", .mode = "x" 的参数
* function 用于使用默认参数,并调用函数 Fopen 进行打开操作
*/