using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; namespace SmartZip.Logic { public class IDXVerificator { string output; public int Execute(string target, bool deleteUnpacked, out string message) { int res = 1; message = String.Empty; string text; if (Directory.Exists(target)) { int tres = CheckDirectory(target, deleteUnpacked, out text); message += text; if (tres != 1) res = tres; } else if (File.Exists(target)) { int tres = CheckFile(new FileInfo(target), deleteUnpacked, out text); message += text; if (tres != 1) res = tres; } else { res = -7; message += "File or folder does not exists " + target; } return res; } int CheckDirectory(string directoryName, bool deleteUnpacked, out string message) { int res = 1; string result = String.Empty; foreach (FileInfo fi in new DirectoryInfo(directoryName).GetFiles("*.7z")) { int tres = CheckFile(fi, deleteUnpacked, out result); if (tres != 1) res = tres; } message = result; return res; } int CheckFile(FileInfo file, bool deleteUnpacked, out string message) { int res = 1; message = String.Empty; string workFolder = file.DirectoryName + @"\" + file.Name.Replace(".7z", ""); DeleteFiles(workFolder); UnpackFile(file, workFolder); int numberOfPdfFiles = 0; //number of pdf files int numberOfRecordsInIndex = 0; // numble of lines in index file foreach (FileInfo a in new DirectoryInfo(workFolder).GetFiles()) { if (a.Extension != ".pdf") { using (TextReader r = a.OpenText()) { while (r.Peek() >= 0) { string line = r.ReadLine(); if (line != string.Empty) numberOfRecordsInIndex++; } } } else if (a.Name.Substring(a.Name.Length - 7, 7) != "_DP.pdf") { string z = a.Name.Substring(a.Name.Length - 7, 7); numberOfPdfFiles++; } } if (numberOfPdfFiles != numberOfRecordsInIndex) { message += Environment.NewLine + "File is inconsistent " + file.FullName; message += Environment.NewLine + "Unacked folder will not be deleted " + workFolder; res = -999; } else { if (numberOfPdfFiles == 0) { message += Environment.NewLine + "File is NOT ok" + file.FullName; message += Environment.NewLine + "There are no pdf files"; res = 3; } else { message += Environment.NewLine + "File is ok" + file.FullName; } message += Environment.NewLine + "Removing data from folder " + workFolder; if (deleteUnpacked) DeleteFiles(workFolder); } return res; } bool UnpackFile(FileInfo file, string workFolder) { string appName = "7za.exe"; string appParam = String.Concat("x ", file.FullName, " -o", workFolder); Process p = Process.Start(appName, appParam); p.WaitForExit(); return true; } void DeleteFiles(string folder) { if (!Directory.Exists(folder)) return; DirectoryInfo di = new DirectoryInfo(folder); FileInfo[] files = di.GetFiles(); foreach (FileInfo f in files) f.Delete(); di.Delete(); } } }