diff --git a/src/include/archives.cpp b/src/include/archives.cpp index 7b9695d75..197e454e5 100755 --- a/src/include/archives.cpp +++ b/src/include/archives.cpp @@ -338,42 +338,13 @@ bool TArchive::zip( // @comm Il parametro
e' utilizzato per evitare errori di riaperture di files. -{ - safely_close_closeable_isamfiles(); +{ + const TFilename workdir = dir; + const TString name = workdir.name(); + // Nome del file compresso + TFilename work; work.tempdir(); work.add(name); work.ext("zip"); - DIRECTORY currdir, newdir; - xvt_fsys_get_curr_dir( &currdir); //memorizza la directory dove e' - - xvt_fsys_convert_str_to_dir(dir, &newdir); //converte il nome della directory - xvt_fsys_set_dir( &newdir); //passa alla directory dir che gli viene passata - - const TFilename workdir = dir; - const TString name = workdir.name(); - - // Nome del file compresso - TFilename work; work.tempdir(); work.add(name); work.ext("zip"); - - TString title(TR("Archiviazione")); title << ' ' << workdir; - TIndwin waitw(100,title,FALSE,FALSE); - TWait_cursor hourglass; - - TString_array filenames; - list_files("*.*", filenames); - - // Crea il file con la lista dei file da comprimere - const char* const ZIPLIST = "ziplist.txt"; - FILE* flist = fopen(ZIPLIST, "w"); - - FOR_EACH_ARRAY_ROW(filenames, r, row) - fprintf(flist, "%s\n",(const char *)*row); - - fclose(flist); - - bool ok = ::aga_zip_filelist(ZIPLIST, work); - - remove(ZIPLIST); //elimina il file di testo con la lista dei files - - xvt_fsys_set_dir( &currdir); //torna a posizionarsi nella directory iniziale + bool ok = zip(dir, work); if (ok) ok = fsplit_zip(work, floppy, desc); @@ -383,6 +354,43 @@ bool TArchive::zip( return ok; } +bool TArchive::zip(const char* dir, const TFilename& work) +{ + safely_close_closeable_isamfiles(); + + DIRECTORY currdir, newdir; + xvt_fsys_get_curr_dir(&currdir); //memorizza la directory dove e' + + xvt_fsys_convert_str_to_dir(dir, &newdir); //converte il nome della directory + xvt_fsys_set_dir(&newdir); //passa alla directory dir che gli viene passata + + const TFilename workdir = dir; + + TString title(TR("Archiviazione")); title << ' ' << workdir; + TIndwin waitw(100, title, FALSE, FALSE); + TWait_cursor hourglass; + + TString_array filenames; + list_files("*.*", filenames); + + // Crea il file con la lista dei file da comprimere + const char* const ZIPLIST = "ziplist.txt"; + FILE* flist = fopen(ZIPLIST, "w"); + + FOR_EACH_ARRAY_ROW(filenames, r, row) + fprintf(flist, "%s\n", (const char *)*row); + + fclose(flist); + + bool ok = ::aga_zip_filelist(ZIPLIST, work); + + remove(ZIPLIST); //elimina il file di testo con la lista dei files + + xvt_fsys_set_dir(&currdir); //torna a posizionarsi nella directory iniziale + + return ok; +} + bool TArchive::zip(int mode, long firm, char floppy, const char* desc) { TString_array fl; @@ -494,6 +502,77 @@ bool TArchive::unzip( return ok; } +bool TArchive::unzip( + const char* dir, // @parm Directory di cui effettuare il restore + const char* fromdir, // @parm percorso da cui leggere i dati + bool tmp) // @parm Directory temporanea da utilizzare +// @syntax bool restore(const char* dir, char floppy, bool temp, bool pr_set); +// @syntax bool restore(long firm, char floppy, bool temp, bool pr_set); +// @comm Il parametro
e' utilizzato per evitare errori di riaperture di files. +{ + TFilename work; + if (tmp) + work.tempdir(); + else + work = dir; + + TFilename output(dir); + output = output.name(); + output.ext("zip"); + + TFilename dest; dest << fromdir; + + if (!yesno_box(FR("Attenzione l'archivio %s\\%s verra' ripristinato\n" + "nel direttorio %s. Continuare?"), + fromdir, (const char*)output, (const char*)work)) + return FALSE; + + bool ok = work.exist(); + if (!ok) + { + ok = yesno_box(FR("Non esiste il direttorio %s: si desidera crearlo?"), (const char*)work); + if (ok) + { + make_dir(work); + ok = work.exist(); + } + if (!ok) + return error_box(FR("Impossibile accedere a %s"), (const char*)work); + } + + TString title(TR("Ripristino")); title << ' ' << output; + TIndwin waitw(100, title, FALSE, FALSE); + + safely_close_closeable_isamfiles(); + + TFilename restored; + restored.tempdir(); + restored.add(output.name()); + restored.ext("zip"); + + TFilename src; + src << fromdir << SLASH; + src << output.name(); + src.ext("zip"); + + while (!src.exist()) + { + if (!yesno_box("Impossibile aprire il file %s:\nSi desidera ritentare?", + (const char *)src)) + break; + } + + if (src.exist()) + { + fcopy(src, restored); + } + ok = ::aga_unzip(restored, work); + if (ok) + remove(restored); + + return ok; +} + bool TArchive::unzip(int mode, long firm, char floppy, bool temp) { TString_array fl; @@ -513,6 +592,12 @@ bool TArchive::backup(const char* dir, char floppy, const char* desc, bool) return zip(dir, floppy, desc); } +bool TArchive::backup(const char* dir, const char* dirdest, const char* desc, bool) const +{ + TFilename work; work << dirdest; work.add(TFilename(dir).name()); work.ext("zip"); + return zip(dir, work); +} + bool TArchive::backup(int mode, long firm, char floppy, const char* desc, bool) { return zip(mode, firm, floppy, desc); @@ -522,6 +607,11 @@ bool TArchive::restore(const char* dir, char floppy, bool tmp, bool) { return unzip(dir, floppy, tmp); } +bool TArchive::restore(const char* dir, const char* fromdir, bool tmp, bool) +{ + + return unzip(dir, fromdir, tmp); +} bool TArchive::restore(int mode, long firm, char floppy, bool tmp, bool) { diff --git a/src/include/archives.h b/src/include/archives.h index 177d1d6c2..20c6b3b2f 100755 --- a/src/include/archives.h +++ b/src/include/archives.h @@ -50,21 +50,29 @@ public: // @cmember Effettua il backup della directory bool backup(const char* dir, char floppy, const char* desc, bool dummy = FALSE); + // @cmember Effettua il backup della directory in un percorso specificato + bool backup(const char* dir, const char* dirdest, const char* desc, bool dummy = FALSE) const; // @cmember Effettua il backup della ditta bool backup(int mode, long firm, char floppy, const char* desc, bool pr_set=TRUE); // @cmember Effettua il restore della directory bool restore(const char* dir, char floppy, bool temp, bool dummy = FALSE); + // @cmember Effettua il restore della directory + bool restore(const char* dir, const char* fromdir, bool temp, bool dummy = FALSE); // @cmember Effettua il restore della ditta bool restore(int mode, long firm, char floppy, bool temp, bool pr_set=TRUE); // @cmember Effettua il backup della directory bool zip(const char* dir, char floppy, const char* desc); + // @cmember Effettua il backup della directory su percorso specificato nel file + static bool zip(const char* dir, const TFilename& work); // @cmember Effettua il backup della ditta bool zip(int mode, long firm, char floppy, const char* desc); // @cmember Effettua il restore della directory bool unzip(const char* dir, char floppy, bool temp); + // @cmember Effettua il restore della directory + bool unzip(const char* dir, const char* fromdir, bool temp); // @cmember Effettua il restore della ditta bool unzip(int mode, long firm, char floppy, bool temp);