diff --git a/.pipelines/ESRPSigning_core.json b/.pipelines/ESRPSigning_core.json
index b4ee89fcf0..5319bdc55f 100644
--- a/.pipelines/ESRPSigning_core.json
+++ b/.pipelines/ESRPSigning_core.json
@@ -321,6 +321,10 @@
"WinUI3Apps\\ReverseMarkdown.dll",
"WinUI3Apps\\SharpCompress.dll",
"WinUI3Apps\\ZstdSharp.dll",
+ "TestableIO.System.IO.Abstractions.dll",
+ "WinUI3Apps\\TestableIO.System.IO.Abstractions.dll",
+ "TestableIO.System.IO.Abstractions.Wrappers.dll",
+ "WinUI3Apps\\TestableIO.System.IO.Abstractions.Wrappers.dll",
"ColorCode.Core.dll",
"ColorCode.UWP.dll",
"UnitsNet.dll",
diff --git a/Directory.Packages.props b/Directory.Packages.props
index a103ca59a8..db4de0da4d 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -73,8 +73,8 @@
-
-
+
+
diff --git a/NOTICE.md b/NOTICE.md
index 38c961a116..ea5e811bb0 100644
--- a/NOTICE.md
+++ b/NOTICE.md
@@ -1354,8 +1354,8 @@ EXHIBIT A -Mozilla Public License.
- System.Data.SqlClient 4.8.6
- System.Diagnostics.EventLog 8.0.1
- System.Drawing.Common 8.0.7
-- System.IO.Abstractions 17.2.3
-- System.IO.Abstractions.TestingHelpers 17.2.3
+- System.IO.Abstractions 21.0.29
+- System.IO.Abstractions.TestingHelpers 21.0.29
- System.Management 8.0.0
- System.Reactive 6.0.1
- System.Runtime.Caching 8.0.1
diff --git a/src/common/ManagedCommon/LanguageHelper.cs b/src/common/ManagedCommon/LanguageHelper.cs
index 90791a03bc..85cdcd1c33 100644
--- a/src/common/ManagedCommon/LanguageHelper.cs
+++ b/src/common/ManagedCommon/LanguageHelper.cs
@@ -4,7 +4,6 @@
using System;
using System.IO;
-using System.IO.Abstractions;
using System.Text.Json;
using System.Text.Json.Serialization;
@@ -23,15 +22,14 @@ namespace ManagedCommon
public static string LoadLanguage()
{
- FileSystem fileSystem = new FileSystem();
var localAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var file = localAppDataDir + SettingsFilePath + SettingsFile;
- if (fileSystem.File.Exists(file))
+ if (File.Exists(file))
{
try
{
- Stream inputStream = fileSystem.File.Open(file, FileMode.Open);
+ var inputStream = File.Open(file, FileMode.Open);
StreamReader reader = new StreamReader(inputStream);
string data = reader.ReadToEnd();
inputStream.Close();
diff --git a/src/common/ManagedCommon/Logger.cs b/src/common/ManagedCommon/Logger.cs
index bbc2637fd9..367480d293 100644
--- a/src/common/ManagedCommon/Logger.cs
+++ b/src/common/ManagedCommon/Logger.cs
@@ -5,7 +5,7 @@
using System;
using System.Diagnostics;
using System.Globalization;
-using System.IO.Abstractions;
+using System.IO;
using System.Reflection;
using PowerToys.Interop;
@@ -14,7 +14,6 @@ namespace ManagedCommon
{
public static class Logger
{
- private static readonly IFileSystem _fileSystem = new FileSystem();
private static readonly Assembly Assembly = Assembly.GetExecutingAssembly();
private static readonly string Version = FileVersionInfo.GetVersionInfo(Assembly.Location).ProductVersion;
@@ -41,12 +40,12 @@ namespace ManagedCommon
applicationLogPath = Constants.AppDataPath() + applicationLogPath + "\\" + Version;
}
- if (!_fileSystem.Directory.Exists(applicationLogPath))
+ if (!Directory.Exists(applicationLogPath))
{
- _fileSystem.Directory.CreateDirectory(applicationLogPath);
+ Directory.CreateDirectory(applicationLogPath);
}
- var logFilePath = _fileSystem.Path.Combine(applicationLogPath, "Log_" + DateTime.Now.ToString(@"yyyy-MM-dd", CultureInfo.InvariantCulture) + ".txt");
+ var logFilePath = Path.Combine(applicationLogPath, "Log_" + DateTime.Now.ToString(@"yyyy-MM-dd", CultureInfo.InvariantCulture) + ".txt");
Trace.Listeners.Add(new TextWriterTraceListener(logFilePath));
diff --git a/src/common/ManagedCommon/ManagedCommon.csproj b/src/common/ManagedCommon/ManagedCommon.csproj
index 164df854eb..f3b149616c 100644
--- a/src/common/ManagedCommon/ManagedCommon.csproj
+++ b/src/common/ManagedCommon/ManagedCommon.csproj
@@ -15,7 +15,6 @@
-
diff --git a/src/modules/Hosts/Hosts.Tests/HostsServiceTest.cs b/src/modules/Hosts/Hosts.Tests/HostsServiceTest.cs
index b57fbf42ed..8eaa37a348 100644
--- a/src/modules/Hosts/Hosts.Tests/HostsServiceTest.cs
+++ b/src/modules/Hosts/Hosts.Tests/HostsServiceTest.cs
@@ -276,7 +276,7 @@ namespace Hosts.Tests
service.RemoveReadOnlyAttribute();
- var readOnly = fileSystem.FileInfo.FromFileName(service.HostsFilePath).Attributes.HasFlag(FileAttributes.ReadOnly);
+ var readOnly = fileSystem.FileInfo.New(service.HostsFilePath).Attributes.HasFlag(FileAttributes.ReadOnly);
Assert.IsFalse(readOnly);
}
@@ -295,7 +295,7 @@ namespace Hosts.Tests
await service.WriteAsync("# Empty hosts file", Enumerable.Empty());
- var hidden = fileSystem.FileInfo.FromFileName(service.HostsFilePath).Attributes.HasFlag(FileAttributes.Hidden);
+ var hidden = fileSystem.FileInfo.New(service.HostsFilePath).Attributes.HasFlag(FileAttributes.Hidden);
Assert.IsTrue(hidden);
}
}
diff --git a/src/modules/Hosts/Hosts.Tests/Mocks/MockFileSystemWatcher.cs b/src/modules/Hosts/Hosts.Tests/Mocks/MockFileSystemWatcher.cs
index 0cbabd217b..5061a6d815 100644
--- a/src/modules/Hosts/Hosts.Tests/Mocks/MockFileSystemWatcher.cs
+++ b/src/modules/Hosts/Hosts.Tests/Mocks/MockFileSystemWatcher.cs
@@ -2,6 +2,7 @@
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
@@ -9,7 +10,7 @@ using System.IO.Abstractions;
namespace Hosts.Tests.Mocks
{
- public class MockFileSystemWatcher : FileSystemWatcherBase
+ public partial class MockFileSystemWatcher : FileSystemWatcherBase
{
public override bool IncludeSubdirectories { get; set; }
@@ -27,26 +28,35 @@ namespace Hosts.Tests.Mocks
public override ISynchronizeInvoke SynchronizingObject { get; set; }
- public override Collection Filters => throw new System.NotImplementedException();
+ public override Collection Filters => throw new NotImplementedException();
- public override WaitForChangedResult WaitForChanged(WatcherChangeTypes changeType) => default;
+ public override IFileSystem FileSystem => throw new NotImplementedException();
- public override WaitForChangedResult WaitForChanged(WatcherChangeTypes changeType, int timeout) => default;
+ public override IContainer Container => throw new NotImplementedException();
- public MockFileSystemWatcher(string path) => Path = path;
+ public override void BeginInit() => throw new NotImplementedException();
+
+ public override void EndInit() => throw new NotImplementedException();
+
+ public override IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType, TimeSpan timeout) => throw new NotImplementedException();
+
+ public override IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType) => throw new NotImplementedException();
+
+ public override IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType, int timeout) => throw new NotImplementedException();
+
+ public MockFileSystemWatcher()
+ {
+ }
+
+ public MockFileSystemWatcher(string path)
+ {
+ Path = path;
+ }
public MockFileSystemWatcher(string path, string filter)
{
Path = path;
Filter = filter;
}
-
- public override void BeginInit()
- {
- }
-
- public override void EndInit()
- {
- }
}
}
diff --git a/src/modules/Hosts/Hosts.Tests/Mocks/MockFileSystemWatcherFactory.cs b/src/modules/Hosts/Hosts.Tests/Mocks/MockFileSystemWatcherFactory.cs
index 3e0b4de140..bef93daf2b 100644
--- a/src/modules/Hosts/Hosts.Tests/Mocks/MockFileSystemWatcherFactory.cs
+++ b/src/modules/Hosts/Hosts.Tests/Mocks/MockFileSystemWatcherFactory.cs
@@ -2,18 +2,22 @@
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System;
+using System.IO;
using System.IO.Abstractions;
namespace Hosts.Tests.Mocks
{
public class MockFileSystemWatcherFactory : IFileSystemWatcherFactory
{
- public IFileSystemWatcher CreateNew() => new MockFileSystemWatcher(null);
+ public IFileSystem FileSystem => throw new NotImplementedException();
- public IFileSystemWatcher CreateNew(string path) => new MockFileSystemWatcher(path);
+ public IFileSystemWatcher New() => new MockFileSystemWatcher();
- public IFileSystemWatcher CreateNew(string path, string filter) => new MockFileSystemWatcher(path, filter);
+ public IFileSystemWatcher New(string path) => new MockFileSystemWatcher(path);
- public IFileSystemWatcher FromPath(string path) => new MockFileSystemWatcher(path);
+ public IFileSystemWatcher New(string path, string filter) => new MockFileSystemWatcher(path, filter);
+
+ public IFileSystemWatcher Wrap(FileSystemWatcher fileSystemWatcher) => throw new NotImplementedException();
}
}
diff --git a/src/modules/Hosts/HostsUILib/Helpers/HostsService.cs b/src/modules/Hosts/HostsUILib/Helpers/HostsService.cs
index a6c1981a82..3270681c5e 100644
--- a/src/modules/Hosts/HostsUILib/Helpers/HostsService.cs
+++ b/src/modules/Hosts/HostsUILib/Helpers/HostsService.cs
@@ -52,7 +52,7 @@ namespace HostsUILib.Helpers
_hostsFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), @"System32\drivers\etc\hosts");
- _fileSystemWatcher = _fileSystem.FileSystemWatcher.CreateNew();
+ _fileSystemWatcher = _fileSystem.FileSystemWatcher.New();
_fileSystemWatcher.Path = _fileSystem.Path.GetDirectoryName(HostsFilePath);
_fileSystemWatcher.Filter = _fileSystem.Path.GetFileName(HostsFilePath);
_fileSystemWatcher.NotifyFilter = NotifyFilters.LastWrite;
@@ -130,7 +130,7 @@ namespace HostsUILib.Helpers
throw new NotRunningElevatedException();
}
- if (_fileSystem.FileInfo.FromFileName(HostsFilePath).IsReadOnly)
+ if (_fileSystem.FileInfo.New(HostsFilePath).IsReadOnly)
{
throw new ReadOnlyHostsException();
}
@@ -200,7 +200,7 @@ namespace HostsUILib.Helpers
}
// FileMode.OpenOrCreate is necessary to prevent UnauthorizedAccessException when the hosts file is hidden
- using var stream = _fileSystem.FileStream.Create(HostsFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read, _defaultBufferSize, FileOptions.Asynchronous);
+ using var stream = _fileSystem.FileStream.New(HostsFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read, _defaultBufferSize, FileOptions.Asynchronous);
using var writer = new StreamWriter(stream, Encoding);
foreach (var line in lines)
{
@@ -305,7 +305,7 @@ namespace HostsUILib.Helpers
public void RemoveReadOnlyAttribute()
{
- var fileInfo = _fileSystem.FileInfo.FromFileName(HostsFilePath);
+ var fileInfo = _fileSystem.FileInfo.New(HostsFilePath);
if (fileInfo.IsReadOnly)
{
fileInfo.IsReadOnly = false;
diff --git a/src/modules/Workspaces/WorkspacesEditor/Utils/IOUtils.cs b/src/modules/Workspaces/WorkspacesEditor/Utils/IOUtils.cs
index 1ec08a79ff..075067cb14 100644
--- a/src/modules/Workspaces/WorkspacesEditor/Utils/IOUtils.cs
+++ b/src/modules/Workspaces/WorkspacesEditor/Utils/IOUtils.cs
@@ -31,7 +31,7 @@ namespace WorkspacesEditor.Utils
{
try
{
- using (Stream inputStream = _fileSystem.File.Open(fileName, FileMode.Open))
+ using (FileSystemStream inputStream = _fileSystem.File.Open(fileName, FileMode.Open))
using (StreamReader reader = new StreamReader(inputStream))
{
string data = reader.ReadToEnd();
diff --git a/src/modules/fancyzones/FancyZonesEditorCommon/Utils/IOUtils.cs b/src/modules/fancyzones/FancyZonesEditorCommon/Utils/IOUtils.cs
index f48a341695..f11e0a2d0e 100644
--- a/src/modules/fancyzones/FancyZonesEditorCommon/Utils/IOUtils.cs
+++ b/src/modules/fancyzones/FancyZonesEditorCommon/Utils/IOUtils.cs
@@ -31,7 +31,7 @@ namespace FancyZonesEditorCommon.Utils
{
try
{
- using (Stream inputStream = _fileSystem.File.Open(fileName, FileMode.Open))
+ using (FileSystemStream inputStream = _fileSystem.File.Open(fileName, FileMode.Open))
using (StreamReader reader = new StreamReader(inputStream))
{
string data = reader.ReadToEnd();
diff --git a/src/modules/fancyzones/UITests-FancyZonesEditor/Utils/IOTestHelper.cs b/src/modules/fancyzones/UITests-FancyZonesEditor/Utils/IOTestHelper.cs
index d472154ac5..7c52ca0c95 100644
--- a/src/modules/fancyzones/UITests-FancyZonesEditor/Utils/IOTestHelper.cs
+++ b/src/modules/fancyzones/UITests-FancyZonesEditor/Utils/IOTestHelper.cs
@@ -27,7 +27,11 @@ namespace Microsoft.FancyZonesEditor.UITests.Utils
}
else
{
- _fileSystem.Directory.CreateDirectory(Path.GetDirectoryName(file));
+ var path = Path.GetDirectoryName(file);
+ if (path != null)
+ {
+ _fileSystem.Directory.CreateDirectory(path);
+ }
}
}
diff --git a/src/modules/imageresizer/ui/Properties/Settings.cs b/src/modules/imageresizer/ui/Properties/Settings.cs
index 6beceeb082..3150f9768f 100644
--- a/src/modules/imageresizer/ui/Properties/Settings.cs
+++ b/src/modules/imageresizer/ui/Properties/Settings.cs
@@ -421,7 +421,7 @@ namespace ImageResizer.Properties
string jsonData = JsonSerializer.Serialize(new SettingsWrapper() { Properties = this }, _jsonSerializerOptions);
// Create directory if it doesn't exist
- IFileInfo file = _fileSystem.FileInfo.FromFileName(SettingsPath);
+ IFileInfo file = _fileSystem.FileInfo.New(SettingsPath);
file.Directory.Create();
// write string to file
diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Folder.UnitTests/InternalQueryFolderTests.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.Folder.UnitTests/InternalQueryFolderTests.cs
index 4bece3c81c..db4fc8f2a1 100644
--- a/src/modules/launcher/Plugins/Microsoft.Plugin.Folder.UnitTests/InternalQueryFolderTests.cs
+++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Folder.UnitTests/InternalQueryFolderTests.cs
@@ -51,7 +51,7 @@ namespace Microsoft.Plugin.Folder.UnitTests
[DataRow(@"c:", 2, 1, false, DisplayName = "Root without \\")]
[DataRow(@"c:\", 2, 1, false, DisplayName = "Normal root")]
[DataRow(@"c:\Test", 2, 2, false, DisplayName = "Select yourself")]
- [DataRow(@"c:\not-exist", 2, 1, false, DisplayName = "Folder not exist, return root")]
+ [DataRow(@"c:\not-exist", 2, 0, false, DisplayName = "Folder not exist, return root")]
[DataRow(@"c:\not-exist\not-exist2", 0, 0, false, DisplayName = "Folder not exist, return root")]
[DataRow(@"c:\bla.t", 2, 1, false, DisplayName = "Partial match file")]
[DataRow(@"c:/bla.t", 2, 1, false, DisplayName = "Partial match file with /")]
@@ -88,8 +88,8 @@ namespace Microsoft.Plugin.Folder.UnitTests
[DataTestMethod]
[DataRow(@"c:\>", 3, 3, true, DisplayName = "Max Folder test recursive")]
- [DataRow(@"c:\Test>", 3, 3, true, DisplayName = "2 Folders recursive")]
- [DataRow(@"c:\not-exist>", 3, 3, true, DisplayName = "Folder not exist, return root recursive")]
+ [DataRow(@"c:\Test>", 3, 0, true, DisplayName = "2 Folders recursive")]
+ [DataRow(@"c:\not-exist>", 3, 0, true, DisplayName = "Folder not exist, return root recursive")]
[DataRow(@"c:\not-exist\not-exist2>", 0, 0, false, DisplayName = "Folder not exist, return root recursive")]
public void Query_Recursive_WhenCalled(string search, int folders, int files, bool truncated)
{
diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Folder/Sources/QueryFileSystemInfo.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.Folder/Sources/QueryFileSystemInfo.cs
index b67a329c84..ec9a1e28f3 100644
--- a/src/modules/launcher/Plugins/Microsoft.Plugin.Folder/Sources/QueryFileSystemInfo.cs
+++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Folder/Sources/QueryFileSystemInfo.cs
@@ -25,7 +25,7 @@ namespace Microsoft.Plugin.Folder.Sources
public IEnumerable MatchFileSystemInfo(string search, string incompleteName, bool isRecursive)
{
// search folder and add results
- var directoryInfo = _directoryInfoFactory.FromDirectoryName(search);
+ var directoryInfo = _directoryInfoFactory.New(search);
var fileSystemInfos = directoryInfo.EnumerateFileSystemInfos(incompleteName, new EnumerationOptions
{
MatchType = _matchType,
diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Program/ProgramSource.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.Program/ProgramSource.cs
index 8406bd8bc8..de87652ed8 100644
--- a/src/modules/launcher/Plugins/Microsoft.Plugin.Program/ProgramSource.cs
+++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Program/ProgramSource.cs
@@ -22,7 +22,7 @@ namespace Microsoft.Plugin.Program
public string Location { get; set; }
- public string Name { get => name ?? FileSystem.DirectoryInfo.FromDirectoryName(Location).Name; set => name = value; }
+ public string Name { get => name ?? FileSystem.DirectoryInfo.New(Location).Name; set => name = value; }
public bool Enabled { get; set; } = true;
diff --git a/src/modules/launcher/Wox.Infrastructure/Helper.cs b/src/modules/launcher/Wox.Infrastructure/Helper.cs
index 40026d35b9..96313e60b5 100644
--- a/src/modules/launcher/Wox.Infrastructure/Helper.cs
+++ b/src/modules/launcher/Wox.Infrastructure/Helper.cs
@@ -71,8 +71,8 @@ namespace Wox.Infrastructure
}
else
{
- var time1 = FileInfo.FromFileName(bundledDataPath).LastWriteTimeUtc;
- var time2 = FileInfo.FromFileName(dataPath).LastWriteTimeUtc;
+ var time1 = FileInfo.New(bundledDataPath).LastWriteTimeUtc;
+ var time2 = FileInfo.New(dataPath).LastWriteTimeUtc;
if (time1 != time2)
{
File.Copy(bundledDataPath, dataPath, true);
diff --git a/src/settings-ui/Settings.UI.Library/LanguageModel.cs b/src/settings-ui/Settings.UI.Library/LanguageModel.cs
index 1e9ef82ec6..63652aba73 100644
--- a/src/settings-ui/Settings.UI.Library/LanguageModel.cs
+++ b/src/settings-ui/Settings.UI.Library/LanguageModel.cs
@@ -30,7 +30,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library
{
try
{
- Stream inputStream = fileSystem.File.Open(file, FileMode.Open);
+ FileSystemStream inputStream = fileSystem.File.Open(file, FileMode.Open);
StreamReader reader = new StreamReader(inputStream);
string data = reader.ReadToEnd();
inputStream.Close();
diff --git a/src/settings-ui/Settings.UI.Library/UpdatingSettings.cs b/src/settings-ui/Settings.UI.Library/UpdatingSettings.cs
index 16e9e50ab7..b5244bbc00 100644
--- a/src/settings-ui/Settings.UI.Library/UpdatingSettings.cs
+++ b/src/settings-ui/Settings.UI.Library/UpdatingSettings.cs
@@ -102,7 +102,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library
{
try
{
- Stream inputStream = fileSystem.File.Open(file, FileMode.Open);
+ FileSystemStream inputStream = fileSystem.File.Open(file, FileMode.Open);
StreamReader reader = new StreamReader(inputStream);
string data = reader.ReadToEnd();
inputStream.Close();
diff --git a/src/settings-ui/Settings.UI.Library/Utilities/Helper.cs b/src/settings-ui/Settings.UI.Library/Utilities/Helper.cs
index fc1f8d6f7c..58d1f5f469 100644
--- a/src/settings-ui/Settings.UI.Library/Utilities/Helper.cs
+++ b/src/settings-ui/Settings.UI.Library/Utilities/Helper.cs
@@ -7,7 +7,6 @@ using System.Diagnostics;
using System.IO;
using System.IO.Abstractions;
using System.Linq;
-using System.Net.NetworkInformation;
using System.Security.Principal;
using Microsoft.PowerToys.Settings.UI.Library.CustomAction;
@@ -63,7 +62,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library.Utilities
FileSystem.Directory.CreateDirectory(path);
}
- var watcher = FileSystem.FileSystemWatcher.CreateNew();
+ var watcher = FileSystem.FileSystemWatcher.New();
watcher.Path = path;
watcher.Filter = fileName;
watcher.NotifyFilter = NotifyFilters.LastWrite;
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/AwakePage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/AwakePage.xaml.cs
index b30ff66844..49861c3c0b 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/AwakePage.xaml.cs
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/AwakePage.xaml.cs
@@ -54,7 +54,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views
var settingsPath = _settingsUtils.GetSettingsFilePath(_appName);
- _fileSystemWatcher = _fileSystem.FileSystemWatcher.CreateNew();
+ _fileSystemWatcher = _fileSystem.FileSystemWatcher.New();
_fileSystemWatcher.Path = _fileSystem.Path.GetDirectoryName(settingsPath);
_fileSystemWatcher.Filter = _fileSystem.Path.GetFileName(settingsPath);
_fileSystemWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.CreationTime;