Fix verifica modifica file

This commit is contained in:
Samuele Locatelli
2021-09-07 14:22:30 +02:00
parent 30172c3bfc
commit 0e2030ba9e
5 changed files with 164 additions and 98 deletions
+75 -58
View File
@@ -80,9 +80,11 @@ namespace MP.FileData.Controllers
{
bool answ = false;
DirectoryInfo dirInfo = new DirectoryInfo(path);
FileInfo[] fileList = dirInfo.GetFiles("*.*");
FileInfo[] fileList = dirInfo.GetFiles(searchPattern);
List<FileInfo> fileNew = new List<FileInfo>();
List<FileInfo> fileMod = new List<FileInfo>();
List<FileModel> fileChecked = new List<FileModel>();
List<FileModel> fileMod = new List<FileModel>();
DateTime adesso = DateTime.Now;
// recupera elenco file nel DB
var archivedFile = FileGetByPath(path, true);
@@ -92,8 +94,9 @@ namespace MP.FileData.Controllers
foreach (var file in fileList)
{
// cerca nel DB...
var currRecord = archivedFile
.Where(x => x.Path == file.FullName)
FileModel currRecord = archivedFile
.Where(x => x.Active && x.Path == file.FullName)
.OrderByDescending(y => y.Rev)
.FirstOrDefault();
// se NON trova lo crea
if (currRecord == null)
@@ -111,8 +114,16 @@ namespace MP.FileData.Controllers
var newMD5 = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
if (newMD5 != currRecord.MD5)
{
fileMod.Add(file);
fileMod.Add(currRecord);
}
else
{
fileChecked.Add(currRecord);
}
}
else
{
fileChecked.Add(currRecord);
}
}
}
@@ -126,7 +137,12 @@ namespace MP.FileData.Controllers
// aggiorno i file modificati
if (fileMod != null && fileMod.Count > 0)
{
FileUpdate(idxMacchina, fileMod);
FileSetUpdated(fileMod);
}
// segno data-ora ultimo controllo x file invariati
if (fileChecked != null && fileChecked.Count > 0)
{
FileSetChecked(fileChecked);
}
return answ;
@@ -334,6 +350,59 @@ namespace MP.FileData.Controllers
return done;
}
/// <summary>
/// Effettua update di un record in archivio da lista (SOLO STATUS)
/// </summary>
/// <param name="updFiles"></param>
/// <returns></returns>
public bool FileSetChecked(List<FileModel> updFiles)
{
bool answ = false;
DateTime adesso = DateTime.Now;
using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration))
{
foreach (var item in updFiles)
{
item.LastCheck = adesso;
localDbCtx.Entry(item).State = EntityState.Modified;
}
// salvo
localDbCtx.SaveChanges();
answ = true;
}
return answ;
}
/// <summary>
/// Effettua update di un record in archivio da lista (SOLO STATUS)
/// </summary>
/// <param name="updFiles"></param>
/// <returns></returns>
public bool FileSetUpdated(List<FileModel> updFiles)
{
bool answ = false;
DateTime adesso = DateTime.Now;
using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration))
{
foreach (var item in updFiles)
{
item.DiskStatus = FileState.Changed;
item.LastCheck = adesso;
localDbCtx.Entry(item).State = EntityState.Modified;
}
// salvo
localDbCtx.SaveChanges();
answ = true;
}
return answ;
}
/// <summary>
/// Aggiorna un Ordine
/// </summary>
@@ -431,58 +500,6 @@ namespace MP.FileData.Controllers
}
#endif
/// <summary>
/// effettua inserimento di un record in archivio come NUOVO documento tracciato
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="updFiles"></param>
/// <returns></returns>
public bool FileUpdate(string idxMacchina, List<FileInfo> updFiles)
{
bool answ = false;
DateTime adesso = DateTime.Now;
// MD5 hash
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration))
{
// converto
List<DatabaseModels.FileModel> newRec = updFiles.Select(o => new DatabaseModels.FileModel()
{
Active = true,
DiskStatus = FileState.Changed,
CodArticolo = "ND",
FileContent = File.ReadAllBytes(o.FullName),
IdxMacchina = idxMacchina,
LastCheck = adesso,
LastMod = o.LastWriteTime,
MimeType = o.Extension,
Name = o.Name,
Path = o.FullName,
Rev = 0,
Size = o.Length
}).ToList();
// calcolo MD5
foreach (var item in newRec)
{
var hash = md5.ComputeHash(item.FileContent);
item.MD5 = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
}
// aggiungo in blocco
localDbCtx
.DbSetProgFile
.UpdateRange(newRec);
// salvo
localDbCtx.SaveChanges();
answ = true;
}
}
return answ;
}
/// <summary>
/// Elenco tabella Macchine
/// </summary>