more refactoring, rework FileCacheManager
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using MareSynchronos.FileCacheDB;
|
||||
using MareSynchronos.Utils;
|
||||
|
||||
@@ -9,6 +10,11 @@ namespace MareSynchronos.Factories
|
||||
public FileCache Create(string file)
|
||||
{
|
||||
FileInfo fileInfo = new(file);
|
||||
while (IsFileLocked(fileInfo))
|
||||
{
|
||||
Thread.Sleep(100);
|
||||
Logger.Debug("File is locked, waiting for release: " + fileInfo.FullName);
|
||||
}
|
||||
var sha1Hash = Crypto.GetFileHash(fileInfo.FullName);
|
||||
return new FileCache()
|
||||
{
|
||||
@@ -24,5 +30,19 @@ namespace MareSynchronos.Factories
|
||||
cache.Hash = Crypto.GetFileHash(cache.Filepath);
|
||||
cache.LastModifiedDate = fileInfo.LastWriteTimeUtc.Ticks.ToString();
|
||||
}
|
||||
|
||||
private bool IsFileLocked(FileInfo file)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var fs = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user