From ca97ec21060af498f6c85656b8f298d392d545ff Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Thu, 9 Mar 2017 19:58:12 +0000 Subject: [PATCH] Neue Version mit Mutex --- FileMutex.cs | 49 +++++++++++++++++++++++++++++++++++++ Properties/AssemblyInfo.cs | 6 ++--- Utils.csproj | 1 + bin/Release/Utils.dll | Bin 16384 -> 17408 bytes 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 FileMutex.cs diff --git a/FileMutex.cs b/FileMutex.cs new file mode 100644 index 0000000..4d3b696 --- /dev/null +++ b/FileMutex.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace BlubbFish.Utils { + public class FileMutex { + private static FileMutex instance; + private String filename; + private StreamWriter file; + private FileMutex() { } + + public static FileMutex Instance { + get { + if(FileMutex.instance == null) { + FileMutex.instance = new FileMutex(); + } + return FileMutex.instance; + } + } + + public void setName(string name) { + string path = AppDomain.CurrentDomain.BaseDirectory; + this.filename = path + string.Join(string.Empty, Array.ConvertAll(new SHA512Managed().ComputeHash(Encoding.UTF8.GetBytes(name)), b => b.ToString("X2"))) + ".lock.txt"; + } + + public bool create() { + if(File.Exists(this.filename)) + return false; + this.file = new StreamWriter(this.filename); + this.initFile(); + return File.Exists(this.filename) && file != null; + } + + private void initFile() { + this.file.Write("Created: " + DateTime.Now.ToUniversalTime()+"\n"); + this.file.Flush(); + } + + public bool delete() { + this.file.Close(); + File.Delete(this.filename); + return !File.Exists(this.filename); + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index f78913c..a08c1a0 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Utils")] -[assembly: AssemblyCopyright("Copyright © 2014 - 03.12.2016")] +[assembly: AssemblyCopyright("Copyright © 2014 - 03.03.2017")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.1")] -[assembly: AssemblyFileVersion("1.0.0.1")] +[assembly: AssemblyVersion("1.0.2.1")] +[assembly: AssemblyFileVersion("1.0.2.1")] diff --git a/Utils.csproj b/Utils.csproj index 22e3a26..7afa00f 100644 --- a/Utils.csproj +++ b/Utils.csproj @@ -42,6 +42,7 @@ + diff --git a/bin/Release/Utils.dll b/bin/Release/Utils.dll index ddf2ca274b96dad14ce7bb326e6e8fb0466a916a..e24b72197d4339c3ad6048a4a877bcc5665f1cf8 100644 GIT binary patch literal 17408 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 WG+w3memN