using Newtonsoft.Json; using System; using System.Diagnostics; using System.IO; namespace IOB_UT_NEXT { public class FileProcMan { #region Public Constructors /// /// Init di base /// /// /// public FileProcMan(string toolDir, string exeFileName) { this.confFileNameOut = "conf.json"; this.baseDir = toolDir; this.exeName = exeFileName; appPath = Path.Combine(baseDir, exeName); } /// /// Init con chiave Redis (es Emmegi FPW) /// /// /// /// /// public FileProcMan(string toolDir, string exeFileName, string redisKey, string refConfFileName) { this.confFileNameOut = "conf.json"; this.redisKey = redisKey; this.baseDir = toolDir; this.exeName = exeFileName; appPath = Path.Combine(baseDir, exeName); // leggo file di conf base string refConfFile = Path.Combine(baseDir, refConfFileName); this.refConf = File.ReadAllText(refConfFile); } /// /// Init completa (es Fimat/Giacovelli) /// /// /// /// /// /// /// public FileProcMan(string archiveDir, string convertDir, string toolDir, string exeFileName, string refConfFileName, string sheetName) { this.archDir = archiveDir; this.convDir = convertDir; this.confFileNameOut = "conf.json"; this.baseDir = toolDir; this.exeName = exeFileName; this.sheetName = sheetName; appPath = Path.Combine(baseDir, exeName); // leggo file di conf base string refConfFile = Path.Combine(baseDir, refConfFileName); this.refConf = File.ReadAllText(refConfFile); } #endregion Public Constructors #region Public Methods /// /// Processa il singolo file (tipo ricette Giacovelli) e riporta tempo esecuzione /// /// public TimeSpan doProcess(string fPath, int idxODL) { TimeSpan outVal = new TimeSpan(); Stopwatch sw = new Stopwatch(); // preparo file conf createConfFile(fPath, idxODL); // avvio processing Console.WriteLine("calling ext app with args:"); Console.WriteLine($"{appPath} {confFileNameOut}"); Console.WriteLine(); ProcessStartInfo psi = new ProcessStartInfo { FileName = appPath, Arguments = $"{confFileNameOut}", WindowStyle = ProcessWindowStyle.Minimized, //WindowStyle = ProcessWindowStyle.Hidden, UseShellExecute = false, //CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardInput = true, }; sw.Start(); Process p = Process.Start(psi); string q = ""; while (!p.HasExited) { q += p.StandardOutput.ReadToEnd(); } sw.Stop(); outVal = sw.Elapsed; return outVal; } #endregion Public Methods #region Protected Fields protected string appPath = ""; protected string archDir = ""; protected string baseDir = ""; protected string confFileNameOut = ""; protected string convDir = ""; protected string exeName = ""; protected string refConf = ""; protected string sheetName = ""; protected string redisKey = ""; #endregion Protected Fields #region Protected Methods protected string fixJsonDir(string origPath) { string answ = JsonConvert.ToString(origPath); answ = answ.Substring(1, answ.Length - 2); return answ; } #endregion Protected Methods #region Private Methods private void createConfFile(string item, int idxOdl) { string outFileName = Path.GetFileName(item).Replace("xlsx", "json"); string rawContent = String.Copy(refConf); rawContent = rawContent.Replace("{{ArchiveDir}}", fixJsonDir(archDir)); rawContent = rawContent.Replace("{{ConvertDir}}", fixJsonDir(convDir)); rawContent = rawContent.Replace("{{FileInPath}}", fixJsonDir(item)); rawContent = rawContent.Replace("{{FileOutPath}}", outFileName); rawContent = rawContent.Replace("{{TargetSheetName}}", sheetName); if (redisKey != null) { rawContent = rawContent.Replace("{{redisKey}}", redisKey); } rawContent = rawContent.Replace("987654321", $"{idxOdl}"); // calcolo nome file conf specifico confFileNameOut = $"conf_{outFileName}"; File.WriteAllText(confFileNameOut, rawContent); } #endregion Private Methods } }