#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
struct ghost
{
char mode[6];
char fname[13];
};
int runghost(FILE *ghofile, struct ghost gho, int xuanze)
{
char panduan;
switch(xuanze)
{
case 1:
fprintf(stdout,"ghost -clone,mode=%s,src=1:1,dst=%s.gho\n",gho.mode,gho.fname); /*备份*/
break;
case 2:
fprintf(stdout,"ghost -clone,mode=%s,src=%s.gho:1,dst=1:1 -fx\n",gho.mode,gho.fname); /*还原*/
break;
}
fflush(stdin);
printf("警告:指令正确自动还原系统,请在这个过程中不要断电~!否则一切后果不担保!!!\n");
printf("指令是否正确??\n");
printf("正确请输入[Y/y],否则请输入[N/n]:");
panduan=getchar();
fflush(stdin);
if(panduan=='y' || panduan=='Y')
{
fprintf(ghofile,"@echo off\n");
switch(xuanze)
{
case 1:
fprintf(ghofile,"ghost8 -clone,mode=%s,src=1:1,dst=%s.gho",gho.mode,gho.fname); /*备份*/
break;
case 2:
fprintf(ghofile,"FORDOS C:/Q/S/V:SYSTEM\n");
fprintf(ghofile,"FORDOS C:/Q/V:SYSTEM\n");
fprintf(ghofile,"ghost8 -clone,mode=%s,src=%s.gho:1,dst=1:1 -fx",gho.mode,gho.fname); /*还原*/
break;
}
return 0;
}
else
{
printf("\n\n您现在可以重新设置指令\n\n");
return 1;
}
}
void help()
{
putchar('\n');
puts("帮助");
puts("1.建议在纯DOS模式下运行本程序,WINDOWS没有测试过,不担保有任何后果~!");
puts("2.本程序所在的目录必须有\"GHOST8.EXE\"这个文件.");
puts("3.本文件及其所引用的所有文件所处的分区不能在第一分区.");
puts("4.所要用户输入的文件名称是备份后的文件名称,长度不能大于8个英文字母长度,建议不大于4个!");
puts("5.本程序不能备份多分区,需要多分区的话...觉得写得挺麻烦的,而且也没那个必要啦...");
putchar('\n');
}
void main()
{
char *pass=(char *)malloc(sizeof(char) * 200);
struct ghost gho;
char *p=(char *)malloc(sizeof(char) * 200);
char tempfilename[13];
int num,panduan,password;
FILE *ghofile;
FILE *hddfile;
do
{
printf("请输入密码:");
scanf("%s",pass);
fflush(stdin);
if(strcmp("repent",pass)!=0)
{
password=1;
printf("密码错误,请重新输入~!\n");
}
else
{
password=0;
system("cls");
}
}while(password);
free(pass);
ghofile=fopen("ReTemp.BAT","w");
if(ghofile == NULL)
{
puts("程序严重出错~!\n");
exit(1);
}
system("dir"); /* DOS */
puts("******************************************");
puts(" 单硬盘-单分区 一键备份/还原软件! ");
putchar('\n');
puts(" 制作人:绝对后悔");
puts(" 程序原码:C");
puts(" 编译软件:Turbo C");
puts(" 发布时间:2005.9.6");
puts("******************************************");
putchar('\n');
do
{
printf("1.\"备份\"系统分区\n");
printf("2.\"还原\"系统分区\n");
printf("3.帮助\n");
printf("4.清屏\n");
printf("5.查询当前目录文件\n");
printf("0.退出程序\n\n");
printf("请填写代号:");
scanf("%d",&num);
fflush(stdin);
switch(num)
{
case 1:
case 2:
if(num==1)
strcpy(gho.mode,"pdump");
else
strcpy(gho.mode,"pload");
printf("请输入镜像文件名,不包括后缀!:");
do
{
panduan=1;
scanf("%[QWERTYUIOPASDFGHJKLMNBVCXZ_qwertyuiopasdfghjklzxcvbnm0123456789]",p);
fflush(stdin);
if(strlen(p)>8)
{
printf("出错~!文件名太长或文件名不标准!!\n");
printf("请重新输入:");
continue;
}
strcpy(tempfilename,p);
strcat(tempfilename,".gho");
hddfile=fopen(tempfilename,"rb");
if(num==1 && hddfile != NULL)
{
printf("硬盘上已经存在相同名称的文件,建议不要重复使用同一文件名的备份!!\n");
printf("请重新输入:");
fclose(hddfile);
continue;
}
strcpy(gho.fname,p);
panduan=0;
}while(panduan);
num=runghost(ghofile,gho,num);
break;
case 3: help(); continue;
case 4: system("cls"); system("dir"); continue; /* DOS */
case 5: system("dir"); continue;
case 0: exit(1);
default: printf("出错~!请选择指定代号~!\n\n"); continue;
}
}while(num);
free(p);
fclose(ghofile);
}