first commit
This commit is contained in:
62
Classes/FileUtil.cs
Normal file
62
Classes/FileUtil.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace EFCDesk.Classes
|
||||
{
|
||||
public static class FileUtil
|
||||
{
|
||||
public static bool IsFileReady(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None);
|
||||
return stream.Length >= 0; // si abre sin excepción, está listo
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool WaitAllFilesReady(IEnumerable<string> files, int perFileTimeoutSeconds)
|
||||
{
|
||||
var deadline = DateTime.UtcNow.AddSeconds(perFileTimeoutSeconds);
|
||||
var pendientes = new HashSet<string>(files);
|
||||
|
||||
while (pendientes.Count > 0 && DateTime.UtcNow < deadline)
|
||||
{
|
||||
var listos = new List<string>();
|
||||
foreach (var f in pendientes)
|
||||
{
|
||||
if (File.Exists(f) && IsFileReady(f))
|
||||
listos.Add(f);
|
||||
}
|
||||
foreach (var ok in listos)
|
||||
pendientes.Remove(ok);
|
||||
|
||||
if (pendientes.Count == 0) return true;
|
||||
Thread.Sleep(500);
|
||||
}
|
||||
return pendientes.Count == 0;
|
||||
}
|
||||
|
||||
public static string? TryGetSHA1(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var fs = File.OpenRead(path);
|
||||
using var sha1 = SHA1.Create();
|
||||
var hash = sha1.ComputeHash(fs);
|
||||
return BitConverter.ToString(hash).Replace("-", "");
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user