/*********************************
Autor: Steve Moser
Name: save and restore
Funtion: save or restore special kind of filetypes
status: complete
**********************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <direct.h>
#include <string.h>
#include <io.h>
char tempbuffer[128];
int counter=0;
int dirlaenge;
char files[255];
char quelle[255];
char ziel[255];
char curdrive[255];
char mitVerz;
char i;
FILE *stream;
FILE *stream1;
FILE *stream2;
/*******************
//function: save
//return value: none
*******************/
int sichern()
{
char help[255];
if(mitVerz=='j')
strcpy(help,"xcopy /e ");
else
strcpy(help,"xcopy ");
strcat(help,quelle); //endgueltiger satzzusammenbau fuer systemaufruf
strcat(help,files);
strcat(help," ");
strcat(help,ziel);
system(help);
return 0;
}
/*********************
function: question to save with subdirectories
return value: none
*********************/
void mitUV()
{
printf("Sollen die Unterverzeichnisse mitgesichert werden?\n");
scanf("%c",&mitVerz);
}
/*****************
function: get source to save or restore
return value: void
*****************/
void getsource() //sucht nach dem quellpfad in der ini
{
int result=-1;
char source[]="[SOURCEPATH]";
char string[255];
struct _finddata_t ini_file;
long hFile;
_chdir(curdrive);
if( (hFile = _findfirst( "HCTSAVE.INI", &ini_file )) == -1L )
{
printf( "Die HCTSAVE.INI Datei befindet sich nicht im aktuellen Verzeichnis!\n" );
printf( "Das Programm wird beendet!!");
fflush(stdin);
scanf("%c",&i);
exit(-1);
}
else
{
stream1 = fopen( "HCTSAVE.INI", "r" );
while(result!=0)
{
fgets(string,255,stream1);
string[strlen(string)-1]='\0';
result=strcmp(string,source); //compares strings and sets result=0 if equal
}
fgets(quelle,255,stream1);
quelle[strlen(quelle)-1]='\0'; //nun kommt nur der wirkliche quellpfad und wird in quelle gespeichert
}
fclose(stream1);
}
void makedir() //sucht nach vorhandenen save ordner und zaehlt sie aufwaerts
{ //wenn der letzte gefunden wurde,wird ein neuer angelegt
char pfad[255];
char finalpfad[255];
char* temp;
temp = malloc(255);
itoa(counter,temp,10); //umwandlung von int in char
strcpy(pfad, ziel ); //string generierung zur ueberpruefung der vorhandenen files
strcat(pfad, "\\save");
strcat(pfad,temp);
while( _chdir(pfad) != -1 ) //durch counter wird der save folder erhoeht z.b.save5
{
counter++;
itoa(counter,temp,10); //jeweilige umwandlung von int in char fuer den string
strcpy(pfad, ziel);
strcat(pfad, "\\save");
strcat(pfad, temp);
}
strcpy(ziel,pfad);
strcpy(finalpfad, "md ");
strcat(finalpfad,"\"");
strcat(finalpfad, pfad);
strcat(finalpfad,"\"");
system(finalpfad); //systemaufruf mit letztendlichem md dos befehl & filename
//z.b."md c:\save\save5"
_chdir(curdrive);
}
void gettarget() //sucht sich in der ini file den zielpfad
{
int result=-1;
char save[]="[SAVEPATH]";
char string[255];
struct _finddata_t ini_file;
long hFile;
_chdir(curdrive);
if( (hFile = _findfirst( "HCTSAVE.INI", &ini_file )) == -1L ) //ueberprueft ob die file vorhanden ist
{
printf( "Die HCTSAVE.INI Datei befindet sich nicht im aktuellen Verzeichnis!\n" );
printf( "Das Programm wird beendet!!");
fflush(stdin);
scanf("%c",&i);
exit(-1);
}
else
{
stream2 = fopen( "HCTSAVE.INI", "r" );
while(result!=0)
{
fgets(string,255,stream2);
string[strlen(string)-1] = '\0';
result=strcmp(string,save);
}
fgets(ziel,255,stream2);
ziel[strlen(ziel)-1]='\0';
}
fclose(stream2);
}
void DestroyOld()
{
char help[255];
strcpy(help,"del/s ");
strcat(help,quelle);
strcat(help,"\\");
strcat(help,files);
system(help);
}
void getfiles() //sucht nach den zu sicherndern files in der ini datei
{
int result=-1;
char file[]="[FILES]";
char source[]="[SOURCEPATH]";
char string[255];
struct _finddata_t ini_file;
long hFile;
gettarget();
getsource();
if(i!='w')
makedir();
if( (hFile = _findfirst( "HCTSAVE.INI", &ini_file )) == -1L )
{
printf( "Die HCTSAVE.INI Datei befindet sich nicht im aktuellen Verzeichnis!\n" );
printf( "Das Programm wird beendet!!");
fflush(stdin);
scanf("%c",&i);
exit(-1);
}
else
{
stream = fopen( "HCTSAVE.INI", "r" );
while(result!=0)
{
fgets(string,255,stream);
string[strlen(string)-1]='\0';
if (strlen(string)==0)
continue;
result=strcmp(string,file);
}
result=-1; //fuer naechste while schleife
while(result!=0)
{
fgets(files, 255,stream);
files[strlen(files)-1] = '\0';
if(strlen(files)==0)
continue;
result=strcmp(files,source);
if(result==0)
continue;
if(i=='w')
DestroyOld();
else
sichern(); // sofortiger aufruf zum sichern
// der einzelnen datei(endung)
}
fclose(stream);
}
}
int wiederherstellen() //stellt ordner zur auswahl und stellt den
{ //gewaehlten ordner wieder her
char help[255];
char warten;
char* temp;
temp = malloc(255);
printf("\nSollen die in der .ini gennanten Dateien vorher geloescht werden?[j][n]:");
scanf("%c",&warten);
if (warten=='j')
getfiles();
else
{
getsource();
gettarget();
}
printf("Welcher Ordner soll wiederhergestellt werden?(Zahl)\n\n");
strcpy(help,"dir /a " ); //creating a full order for systemcall
strcat(help,ziel); //
system(help); //
printf("Bitte geben Sie nur die Nummer des Ordners an:");
scanf("%d",&counter); //number of save folder e.g. 5 for save5 folder
itoa(counter,temp,10); //converts int to char
strcpy(help, "xcopy /s /y /f ");
strcat(help,"\"");
strcat(help,ziel);
strcat(help,"\\");
strcat(help,"save");
strcat(help, temp);
strcat(help,"\"");
strcat(help," ");
strcat(help,"\"");
strcat(help,quelle );
strcat(help,"\"");
system(help);
scanf("%c",&warten); //wait for finish
return 0;
}
void info()
{
printf("Ver.1.0\n");
printf("SAFE AND RESTORE FOR HCT\n");
_strtime( tempbuffer );
printf( "OS time:\t\t\t\t%s\n", tempbuffer );
_strdate( tempbuffer );
printf( "OS date:\t\t\t\t%s\n", tempbuffer );
printf("===========================================================================\n\n");
printf("Dieses Programm dient zur Sicherung und Wiederherstellung der *.log und\n*.ini Dateien des HCT-Programmes.\n");
printf("Die Quell-, und Zielfade koennen in der HCTSAVE.INI ueber den Editor veraendert werden.\n");
printf("Es koennen unter [FILES] in der .ini Datei beliebige Dateienendungen,\nwie z.B. *.log, zur Sicherung eingetragen werden.\n");
printf("ACHTUNG!! Die .INI muss sich in dem gleichen Verzeichnis befinden wie \ndie exe Datei.\n");
printf("Das aktuelle Verzeichnis ist: %s \n",curdrive);
}
void main(int argc, char *argv[ ] )
{
strcpy (curdrive,argv[0]);
dirlaenge=(strlen(argv[0]));
while(curdrive[strlen(curdrive)-1] != '\\') //da in curdrive das verzeichnis und filename stehen
curdrive[strlen(curdrive)-1] = '\0'; //wird er abgeschnitten bis nur das verzeichnis uebrig bleibt
info();
printf("\nWas moechten Sie machen?\n\nSichern(s)\n----------------------\nWiederherstellen(w)\n\n==========================================================================\n\n");
nochmal:
scanf("%c",&i);
fflush(stdin);
switch(i)
{
case 's': mitUV();
getfiles();
break;
case 'w': wiederherstellen();
break;
case 'e': exit (-1);
default: printf("\nBitte s,w oder e fuer Exit eingeben.\n");
goto nochmal;
}
scanf("%c",&i); //zum beenden des programms taste druecken
}
syntax highlighted by Code2HTML, v. 0.9.1