/// <summary> /// Delete files in queue /// </summary> /// <param name="fileList"></param> private void DeleteFiles(List <string> fileList) { Queue myQueue = new Queue(); int maxTryCount = 200; int currentTryCount = 0; FileWorker fileWorker = new FileWorker(); foreach (string s in fileList) { myQueue.Enqueue(s); } while (myQueue.Count != 0 && maxTryCount > currentTryCount) { string s = myQueue.Dequeue().ToString(); currentTryCount++; try { System.Threading.Thread.Sleep(20); fileWorker.DeleteFiles(s); System.Threading.Thread.Sleep(20); } catch (Exception ex) { myQueue.Enqueue(s); fileWorker.Logs("Level 2 Error" + ex.Message); } } }
/// <summary> /// Return List of files with old file names /// </summary> /// <param name="files"></param> /// <returns></returns> public List <FileInfo> SortFilesByNameAndExt(FileInfo[] files, string oldName) { FileWorker fw = new FileWorker(); bool goodExt = false; List <FileInfo> newFiles = new List <FileInfo>(); foreach (FileInfo f in files) { fw.Logs(f.Name); foreach (string s in extensions) { string tmp = Helper.GetExtension(f.Name); if (tmp == s) { goodExt = true; break; } } if (Helper.HasFirstName(f.Name, oldName) && goodExt) { newFiles.Add(f); } else { goodExt = false; continue; } goodExt = false; } return(newFiles); }
/// <summary> /// Resave files with old name, changing it to new name /// </summary> /// <param name="folderPath"></param> /// <param name="oldName"></param> /// <param name="newName"></param> public void ResaveFilesInFolder(string[] args) { Helper.ExstractDataFromArgs(args, out folderPath, out oldName, out newName, out extension); PlusReplaceCompleted(); byte excelExtension = Helper.ExtensionToByte(extension); FileWorker fileWorker = new FileWorker(); fileWorker.Logs("", "1"); List <string> fullPath = new List <string>(); fullPath = fileWorker.GetAllFullFilePath(fileWorker.SortFilesByNameAndExt(fileWorker.GetAllFiesInDirectory(folderPath), oldName)); List <string> fileNames = new List <string>(); fileNames = fileWorker.GetAllFileNames(fileWorker.SortFilesByNameAndExt(fileWorker.GetAllFiesInDirectory(folderPath), oldName)); List <string> filesForDeletion = new List <string>(); List <string> sameFiles = new List <string>(); if (fullPath.Count != 0) { int q = 0; bool flag = false; foreach (string s in fullPath) { fileWorker.Logs(s); ExcelWorker excelWorker = new ExcelWorker(); try { if (!excelWorker.ResaveExcelFile(folderPath, s, Helper.Replace(fileNames[q], oldName, newName), excelExtension, oldName)) { q++; flag = true; filesForDeletion.Add(s); excelWorker.GetLastErrors(ref errorsMessages); if (errorsMessages.Count != 0) { fileWorker.Logs(errorsMessages); } GColectorStart(); } else { excelWorker.GetLastErrors(ref errorsMessages); if (errorsMessages.Count != 0) { fileWorker.Logs(errorsMessages); } GColectorStart(); } GColectorStart(); } catch (Exception ex) { level2Exception = ex; fileWorker.Logs("Level 2 Error" + level2Exception.Message); GColectorStart(); } if (flag != true) { q++; GColectorStart(); } flag = false; GColectorStart(); } DeleteFiles(filesForDeletion); fileWorker.Logs(statusString); fileWorker.Logs("\n"); } }
/// <summary> /// Dispose COM objects /// </summary> private void DisposeCOMObjects() { FileWorker fileWorker = new FileWorker(); try { xlWorkbook.Close(false); } catch (Exception ex) { errorsMessages.Add(ex.Message); } try { xlApp.Quit(); } catch (Exception ex) { errorsMessages.Add(ex.Message); if (ex.Message == "Exception from HRESULT: 0x800AC472") { GetWindowThreadProcessId((IntPtr)hWnd, out pid); if (hWnd != 0) { try { Process[] procs = Process.GetProcessesByName("EXCEL"); if (pid != 0) { foreach (Process p in procs) { if (p.Id == pid) { fileWorker.Logs(p.Id.ToString()); p.Kill(); } } } } catch (Exception ex1) { errorsMessages.Add(ex1.Message); } } } } GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers(); try { Marshal.ReleaseComObject(xlWorkbook); } catch (Exception ex) { errorsMessages.Add(ex.Message); } try { Marshal.ReleaseComObject(xlApp); } catch (Exception ex) { errorsMessages.Add(ex.Message); } GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers(); }