diff --git a/BackupEssentials/BackupEssentials.csproj b/BackupEssentials/BackupEssentials.csproj index 2dcf1d8..975fbac 100644 --- a/BackupEssentials/BackupEssentials.csproj +++ b/BackupEssentials/BackupEssentials.csproj @@ -140,6 +140,7 @@ <DependentUpon>TestingWindow.xaml</DependentUpon> </Compile> <Compile Include="Sys\UI\DateFormat.cs" /> + <Compile Include="Utils\FileLock.cs" /> <Compile Include="Utils\FileUtils.cs" /> <Compile Include="Utils\KeyEqualityComparer.cs" /> <Compile Include="Utils\NativeMethods.cs" /> diff --git a/BackupEssentials/Utils/FileLock.cs b/BackupEssentials/Utils/FileLock.cs new file mode 100644 index 0000000..cede5d0 --- /dev/null +++ b/BackupEssentials/Utils/FileLock.cs @@ -0,0 +1,35 @@ +using System.Diagnostics; +using System.IO; + +namespace BackupEssentials.Utils{ + class FileLock{ + private static readonly int processID = Process.GetCurrentProcess().Id; + + private readonly string FileName; + private bool IsLocked; + + public FileLock(string lockFileName){ + this.FileName = lockFileName; + } + + public bool TryLock(){ + if (FileUtils.WriteFile(FileName,FileMode.CreateNew,(writer) => { writer.Write(processID); })){ + IsLocked = false; + FileUtils.ReadFile(FileName,FileMode.Open,(line) => { IsLocked = line.Equals(processID.ToString()); }); + return IsLocked; + } + else return false; + } + + public bool ReleaseLock(){ + if (IsLocked){ + try{ + File.Delete(FileName); + return true; + }catch(IOException){} + } + + return false; + } + } +}