diff --git a/ba/ba1100.cpp b/ba/ba1100.cpp index 258fc5942..514342fee 100755 --- a/ba/ba1100.cpp +++ b/ba/ba1100.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "ba1.h" #include "ba1100.h" @@ -516,10 +517,53 @@ void TManutenzione_app::update_dir() d.get(i, _nolock, _nordir, _sysdirop); bool to_create = (is_com ? d.is_com() : d.is_firm()); - if (flags < 0 && len != d.len() && s != d.name()) + if (flags < 0 && s != d.name()) { - d.set(s, d.eox(), 0L, desc, d.expr()); - towrite = TRUE; + bool ok = TRUE; + if (to_create) + { + TDir d1; + + prefix().set(""); + d1.get(i); + + const TFilename fd(d1.name()); + + prefix().set(pref); + d1.get(i); + const TFilename fs(d1.name()); + + if (fexist(fs)) + { + TFilename path(fd.path()); + path.rtrim(1); + if (!fexist(path)) + ok = make_dir(path); + if (ok && fcopy(fs, fd)) + { + const TFilename fsi(CGetIdxName((char *)(const char *)fs)); + const TFilename fdi(CGetIdxName((char *)(const char *)fd)); + + if (fcopy(fsi, fdi)) + { + remove(fs); + remove(fsi); + } + else + { + remove(fd); + ok = FALSE; + } + } + else + ok = FALSE; + } + } + if (ok) + { + d.set(s, d.eox(), 0L, desc, d.expr()); + towrite = TRUE; + } } else { @@ -530,7 +574,7 @@ void TManutenzione_app::update_dir() if (towrite) d.put(i, _nordir, _sysdirop); d.get(i); - TFilename datafile(d.name()); + TFilename datafile(d.name()); if (to_create && !fexist(datafile)) {