137 lines
4.3 KiB
C#
137 lines
4.3 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|