Patch level : 12.0 820

Files correlati     : ve5.exe, ve5100a.msk
Commento            : Aggiunte funzione di zip unzip per file senza floppy
This commit is contained in:
Simone Palacino 2019-06-11 12:10:17 +02:00
parent 8a6a484f54
commit 76ab6fec41
2 changed files with 133 additions and 35 deletions

View File

@ -338,42 +338,13 @@ bool TArchive::zip(
// @comm Il parametro <p pr_set> 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 <p pr_set> 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)
{

View File

@ -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);