diff --git a/Adaptation/FileHandlers/DownloadTXTFile/FileRead.cs b/Adaptation/FileHandlers/DownloadTXTFile/FileRead.cs index 223d927..e64aeaa 100644 --- a/Adaptation/FileHandlers/DownloadTXTFile/FileRead.cs +++ b/Adaptation/FileHandlers/DownloadTXTFile/FileRead.cs @@ -38,6 +38,7 @@ public class FileRead : Shared.FileRead, IFileRead throw new Exception(cellInstanceConnectionName); _HttpClient = new(); _StaticFileServer = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, string.Concat("CellInstance.", cellInstanceName, ".StaticFileServer")); + NestExistingFiles(_FileConnectorConfiguration); if (!Debugger.IsAttached && fileConnectorConfiguration.PreProcessingMode != FileConnectorConfiguration.PreProcessingModeEnum.Process) _Timer = new Timer(Callback, null, (int)(fileConnectorConfiguration.FileScanningIntervalInSeconds * 1000), Timeout.Infinite); else @@ -259,6 +260,17 @@ public class FileRead : Shared.FileRead, IFileRead #nullable disable } + private TimeSpan GetNextTimeSpan() + { + TimeSpan result; + string checkFile = Path.Combine(_FileConnectorConfiguration.AlternateTargetFolder, _FileConnectorConfiguration.SourceFileFilter.Split('|')[0]); + if (File.Exists(checkFile)) + result = new(DateTime.Now.AddMilliseconds(500).Ticks - DateTime.Now.Ticks); + else + result = new(DateTime.Now.AddSeconds(_FileConnectorConfiguration.FileScanningIntervalInSeconds.Value).Ticks - DateTime.Now.Ticks); + return result; + } + private void Callback(object state) { try @@ -276,7 +288,7 @@ public class FileRead : Shared.FileRead, IFileRead } try { - TimeSpan timeSpan = new(DateTime.Now.AddSeconds(_FileConnectorConfiguration.FileScanningIntervalInSeconds.Value).Ticks - DateTime.Now.Ticks); + TimeSpan timeSpan = GetNextTimeSpan(); _ = _Timer.Change((long)timeSpan.TotalMilliseconds, Timeout.Infinite); } catch (Exception exception) diff --git a/Adaptation/FileHandlers/Stratus/FileRead.cs b/Adaptation/FileHandlers/Stratus/FileRead.cs index 67f93f2..dd6370e 100644 --- a/Adaptation/FileHandlers/Stratus/FileRead.cs +++ b/Adaptation/FileHandlers/Stratus/FileRead.cs @@ -29,6 +29,7 @@ public class FileRead : Shared.FileRead, IFileRead if (_IsDuplicator) throw new Exception(cellInstanceConnectionName); _OriginalDataBioRad = "OriginalDataBioRad_"; + NestExistingFiles(_FileConnectorConfiguration); } void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults); diff --git a/Adaptation/FileHandlers/txt/FileRead.cs b/Adaptation/FileHandlers/txt/FileRead.cs index 39ef1d4..2ba119e 100644 --- a/Adaptation/FileHandlers/txt/FileRead.cs +++ b/Adaptation/FileHandlers/txt/FileRead.cs @@ -29,6 +29,7 @@ public class FileRead : Shared.FileRead, IFileRead if (_IsDuplicator) throw new Exception(cellInstanceConnectionName); _OriginalDataBioRad = "OriginalDataBioRad_"; + NestExistingFiles(_FileConnectorConfiguration); } void IFileRead.Move(Tuple> extractResults, Exception exception) => Move(extractResults); diff --git a/Adaptation/Shared/FileRead.cs b/Adaptation/Shared/FileRead.cs index 16fcf8a..9d30d08 100644 --- a/Adaptation/Shared/FileRead.cs +++ b/Adaptation/Shared/FileRead.cs @@ -489,6 +489,43 @@ public class FileRead : Properties.IFileRead } } + protected static void NestExistingFiles(FileConnectorConfiguration fileConnectorConfiguration) + { + if (!fileConnectorConfiguration.IncludeSubDirectories.Value) + { + string[] matches = GetMatches(fileConnectorConfiguration); + if (matches is not null && matches.Length > 0) + { + string fileName; + string nestedDirectory = Path.Combine(fileConnectorConfiguration.SourceFileLocation, DateTime.Now.Ticks.ToString()); + if (!Directory.Exists(nestedDirectory)) + _ = Directory.CreateDirectory(nestedDirectory); + foreach (string match in matches) + { + fileName = Path.GetFileName(match); + File.Move(match, Path.Combine(fileConnectorConfiguration.SourceFileLocation, fileName)); + } + } + } + } + + protected static string[] GetMatches(FileConnectorConfiguration fileConnectorConfiguration) + { + string[] segments; + string[] results = null; + foreach (string subSourceFileFilter in fileConnectorConfiguration.SourceFileFilters) + { + segments = subSourceFileFilter.Split('\\'); + if (fileConnectorConfiguration.IncludeSubDirectories.Value) + results = Directory.GetFiles(fileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.AllDirectories); + else + results = Directory.GetFiles(fileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.TopDirectoryOnly); + if (results.Length != 0) + break; + } + return results; + } + protected Tuple> ReExtract(IFileRead fileRead, List headerNames, Dictionary keyValuePairs) { Tuple> results; @@ -496,18 +533,7 @@ public class FileRead : Properties.IFileRead results = null; else { - string[] segments; - string[] matches = null; - foreach (string subSourceFileFilter in _FileConnectorConfiguration.SourceFileFilters) - { - segments = subSourceFileFilter.Split('\\'); - if (_FileConnectorConfiguration.IncludeSubDirectories.Value) - matches = Directory.GetFiles(_FileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.AllDirectories); - else - matches = Directory.GetFiles(_FileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.TopDirectoryOnly); - if (matches.Length != 0) - break; - } + string[] matches = GetMatches(_FileConnectorConfiguration); if (matches is null || matches.Length == 0) results = null; else