2025-04-15 12:10:19 +02:00

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();
}
}
}