diff --git a/ChartButlerCS/Utility.cs b/ChartButlerCS/Utility.cs
index 17d742b..52cee0b 100644
--- a/ChartButlerCS/Utility.cs
+++ b/ChartButlerCS/Utility.cs
@@ -1,206 +1,212 @@
-using System;
-using System.Net;
-using System.Net.Http;
-using System.Net.Security;
-using System.IO;
-using System.Text;
-using System.Text.RegularExpressions;
-
-namespace ChartButlerCS
-{
- static class Utility
- {
- public static string BuildChartPath(ChartButlerDataSet.AFChartsRow chartRow)
- {
- return Path.Combine(
- chartRow.ICAO + " - " + chartRow.AirfieldsRow.AFname,
- chartRow.Cname);
- }
- public static string BuildChartPreviewPath(ChartButlerDataSet.AFChartsRow chartRow, string extension)
- {
- return Path.Combine(
- chartRow.ICAO + " - " + chartRow.AirfieldsRow.AFname,
- "." + chartRow.Cname + "_preview." + extension);
- }
-
- ///
- /// Lädt Daten von einer URL und speichert sie als Datei.
- ///
- /// Die auszulesende URL
- /// lokaler Zielpfad
- public static void DownloadFileFromURL(string filePath, string URL)
- {
- using (WebClient dlcl = new WebClient())
- {
- dlcl.DownloadFile(new Uri(URL), filePath);
- }
- }
-
- ///
- /// Öffnet eine URL und stellt den Inhalt als Quelltext zur Verfügung.
- ///
- /// Die auszulesende URL.
- /// Der Seiten-Quelltext der URL als string-Objekt.
- public static string GetURLText(string URL, RemoteCertificateValidationCallback serverCertificateValidationCallback)
- {
- HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
- request.ServerCertificateValidationCallback += serverCertificateValidationCallback;
- request.Method = "GET";
- request.ContentType = "text/html;charset=iso-8859-1";
- HttpWebResponse response = (HttpWebResponse)request.GetResponse();
- StreamReader dlread = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("ISO-8859-1"));
- string responseText = dlread.ReadToEnd();
- response.Close();
- dlread.Close();
- return responseText;
- }
-
- ///
- /// Öffnet eine URL und stellt den Inhalt als Quelltext zur Verfügung.
- /// Diese Methode ist praktisch identisch zu GetURLText, aber entspricht der Empfehlung
- /// HttpWebRequest durch HttpClient zu ersetzen.
- ///
- /// Die auszulesende URL.
- /// Der Seiten-Quelltext der URL als string-Objekt.
- public static string GetURLText2(HttpClient httpClient, Uri URL)
- {
- var httpResponseTask = httpClient.GetAsync(URL);
- httpResponseTask.Wait();
- HttpResponseMessage response = httpResponseTask.Result;
- response.EnsureSuccessStatusCode();
- var httpBodyTask = response.Content.ReadAsStringAsync();
- httpBodyTask.Wait();
- return httpBodyTask.Result;
- }
-
- ///
- /// Sucht in einem String-Objekt nach einem spezifizierten Text-Teil und stellt
- /// die [numChars] Zeichen nach dessen Vorkommen zur Verfügung.
- ///
- /// Der zu durchsuchende Text.
- /// Das Einleitungs-Suchmuster
- /// Die Anzahl der zu lesenden Zeichen.
- /// Der Startpunkt. Er wird auf die Position nach dem abschließenden Ausdruck erhöht.
- /// Die gefundene Zeichenkette.
- public static string GetTextAfterPhrase(string ContainingText, string SearchPhrase, int numChars, ref int StartAtPos)
- {
- int Cnt = ContainingText.IndexOf(SearchPhrase, StartAtPos) + SearchPhrase.Length;
- StartAtPos = Cnt + numChars;
- return ContainingText.Substring(Cnt, numChars);
- }
-
- ///
- /// Stellt die zwischen zwei Teilzeichenfolgen stehende Zeichenfolge aus einem String zur Verfügung.
- ///
- /// Die zu durchsuchende Zeichenfolge.
- /// Die einleitende Zeichenfolge.
- /// Die Abschluss-Zeichenfolge.
- /// Der Startpunkt. Er wird auf die Position nach dem abschließenden Ausdruck erhöht
- /// oder auf -1 gesetzt, falls kein Fund vorliegt.
- /// Die gefundene Zeichenkette.
- public static string GetTextBetween(string ContainingText, string SearchPhrase, string StopPhrase, ref int StartAtPos)
- {
- string result = string.Empty;
- int CntStart = ContainingText.IndexOf(SearchPhrase, StartAtPos);
- if (CntStart > 0)
- {
- CntStart += SearchPhrase.Length;
- int CntStop = ContainingText.IndexOf(StopPhrase, CntStart);
- StartAtPos = CntStop + StopPhrase.Length;
- result = ContainingText.Substring(CntStart, (CntStop - CntStart));
- }
- else
- {
- StartAtPos = -1;
- }
- return result;
- }
-
- ///
- /// Stellt die zwischen zwei regulären Ausdrücken stehende Zeichenfolge aus einem String zur Verfügung.
- ///
- /// Die zu durchsuchende Zeichenfolge.
- /// Der einleitende reguläre Ausdruck.
- /// Der abschließende reguläre Ausdruck.
- /// Der Startpunkt. Er wird auf die Position nach dem abschließenden Ausdruck erhöht
- /// oder auf -1 gesetzt, falls kein Fund vorliegt.
- /// Die gefundene Zeichenkette oder string.Empty, falls kein Match gefunden werden konnte.
- public static string GetTextBetweenRegex(string ContainingText, Regex StartRegex, Regex StopRegex, ref int StartAtPos)
- {
- string result = string.Empty;
- Match MatchStart = StartRegex.Match(ContainingText, StartAtPos);
- if (MatchStart.Success)
- {
- int CntStart = MatchStart.Index + MatchStart.Length;
- Match MatchStop = StopRegex.Match(ContainingText, CntStart);
- if (MatchStop.Success)
- {
- int CntStop = MatchStop.Index;
- StartAtPos = CntStop + MatchStop.Length;
- result = ContainingText.Substring(CntStart, (CntStop - CntStart));
- }
- else
- {
- StartAtPos = -1;
- }
- }
- else
- {
- StartAtPos = -1;
- }
- return result;
- }
-
- ///
- /// Führt einen binären Vergleich zweier Dateien durch.
- ///
- /// Pfad zu Datei 1
- /// Pfad zu Datei 2
- /// Wahr, wenn die beiden Dateien binär identisch sind.
- public static bool FileEquals(string fileName1, string fileName2)
- {
- if (!File.Exists(fileName1) || !File.Exists(fileName2))
- return false;
-
- FileInfo info1 = new FileInfo(fileName1);
- FileInfo info2 = new FileInfo(fileName2);
- bool same = info1.Length == info2.Length;
-
- if (same)
- {
- using (FileStream fs1 = info1.OpenRead())
- using (FileStream fs2 = info2.OpenRead())
- using (BufferedStream bs1 = new BufferedStream(fs1))
- using (BufferedStream bs2 = new BufferedStream(fs2))
- {
- for (long i = 0; i < info1.Length; i++)
- {
- if (bs1.ReadByte() != bs2.ReadByte())
- {
- same = false;
- break;
- }
- }
- }
- }
-
- return same;
- }
-
- ///
- /// Erzeugt einen Dateinamen für einen angegebenen String.
- /// Dabei werden aus dem String alle ungültigen Zeichen entweder ersetzt oder entfernt.
- ///
- /// Der String
- /// Einen Dateinamen
- public static string GetFilenameFor(string name)
- {
- string filename = Regex.Replace(name, @"[/\<>]", "-");
- filename = Regex.Replace(filename, @"['""]", "");
- filename = filename.Trim();
- filename = filename.TrimEnd('.');
- return filename;
- }
-
- }
-}
+using System;
+using System.Net;
+using System.Net.Http;
+using System.Net.Security;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+
+namespace ChartButlerCS
+{
+ static class Utility
+ {
+ public static string BuildChartPath(ChartButlerDataSet.AFChartsRow chartRow)
+ {
+ return Path.Combine(
+ chartRow.ICAO + " - " + chartRow.AirfieldsRow.AFname,
+ chartRow.Cname);
+ }
+ public static string BuildChartPreviewPath(ChartButlerDataSet.AFChartsRow chartRow, string extension)
+ {
+ return Path.Combine(
+ chartRow.ICAO + " - " + chartRow.AirfieldsRow.AFname,
+ "." + chartRow.Cname + "_preview." + extension);
+ }
+
+ ///
+ /// Lädt Daten von einer URL und speichert sie als Datei.
+ ///
+ /// Die auszulesende URL
+ /// lokaler Zielpfad
+ public static void DownloadFileFromURL(string filePath, string URL)
+ {
+ using (WebClient dlcl = new WebClient())
+ {
+ dlcl.DownloadFile(new Uri(URL), filePath);
+ }
+ }
+
+ ///
+ /// Öffnet eine URL und stellt den Inhalt als Quelltext zur Verfügung.
+ ///
+ /// Die auszulesende URL.
+ /// Der Seiten-Quelltext der URL als string-Objekt.
+ public static string GetURLText(string URL, RemoteCertificateValidationCallback serverCertificateValidationCallback)
+ {
+ HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
+ request.ServerCertificateValidationCallback += serverCertificateValidationCallback;
+ request.Method = "GET";
+ request.ContentType = "text/html;charset=iso-8859-1";
+ HttpWebResponse response = (HttpWebResponse)request.GetResponse();
+ StreamReader dlread = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("ISO-8859-1"));
+ string responseText = dlread.ReadToEnd();
+ response.Close();
+ dlread.Close();
+ return responseText;
+ }
+
+ ///
+ /// Öffnet eine URL und stellt den Inhalt als Quelltext zur Verfügung.
+ /// Diese Methode ist praktisch identisch zu GetURLText, aber entspricht der Empfehlung
+ /// HttpWebRequest durch HttpClient zu ersetzen.
+ ///
+ /// Die auszulesende URL.
+ /// Der Seiten-Quelltext der URL als string-Objekt.
+ public static string GetURLText2(HttpClient httpClient, Uri URL)
+ {
+ var httpResponseTask = httpClient.GetAsync(URL);
+ httpResponseTask.Wait();
+ HttpResponseMessage response = httpResponseTask.Result;
+ response.EnsureSuccessStatusCode();
+ var httpBodyTask = response.Content.ReadAsStringAsync();
+ httpBodyTask.Wait();
+ return httpBodyTask.Result;
+ }
+
+ ///
+ /// Sucht in einem String-Objekt nach einem spezifizierten Text-Teil und stellt
+ /// die [numChars] Zeichen nach dessen Vorkommen zur Verfügung.
+ ///
+ /// Der zu durchsuchende Text.
+ /// Das Einleitungs-Suchmuster
+ /// Die Anzahl der zu lesenden Zeichen.
+ /// Der Startpunkt. Er wird auf die Position nach dem abschließenden Ausdruck erhöht.
+ /// Die gefundene Zeichenkette.
+ public static string GetTextAfterPhrase(string ContainingText, string SearchPhrase, int numChars, ref int StartAtPos)
+ {
+ int Cnt = ContainingText.IndexOf(SearchPhrase, StartAtPos);
+ if (Cnt >= 0)
+ {
+ Cnt += SearchPhrase.Length;
+ StartAtPos = Cnt + numChars;
+ return ContainingText.Substring(Cnt, numChars);
+ }
+ StartAtPos = -1;
+ return string.Empty;
+ }
+
+ ///
+ /// Stellt die zwischen zwei Teilzeichenfolgen stehende Zeichenfolge aus einem String zur Verfügung.
+ ///
+ /// Die zu durchsuchende Zeichenfolge.
+ /// Die einleitende Zeichenfolge.
+ /// Die Abschluss-Zeichenfolge.
+ /// Der Startpunkt. Er wird auf die Position nach dem abschließenden Ausdruck erhöht
+ /// oder auf -1 gesetzt, falls kein Fund vorliegt.
+ /// Die gefundene Zeichenkette.
+ public static string GetTextBetween(string ContainingText, string SearchPhrase, string StopPhrase, ref int StartAtPos)
+ {
+ string result = string.Empty;
+ int CntStart = ContainingText.IndexOf(SearchPhrase, StartAtPos);
+ if (CntStart >= 0)
+ {
+ CntStart += SearchPhrase.Length;
+ int CntStop = ContainingText.IndexOf(StopPhrase, CntStart);
+ StartAtPos = CntStop + StopPhrase.Length;
+ result = ContainingText.Substring(CntStart, (CntStop - CntStart));
+ }
+ else
+ {
+ StartAtPos = -1;
+ }
+ return result;
+ }
+
+ ///
+ /// Stellt die zwischen zwei regulären Ausdrücken stehende Zeichenfolge aus einem String zur Verfügung.
+ ///
+ /// Die zu durchsuchende Zeichenfolge.
+ /// Der einleitende reguläre Ausdruck.
+ /// Der abschließende reguläre Ausdruck.
+ /// Der Startpunkt. Er wird auf die Position nach dem abschließenden Ausdruck erhöht
+ /// oder auf -1 gesetzt, falls kein Fund vorliegt.
+ /// Die gefundene Zeichenkette oder string.Empty, falls kein Match gefunden werden konnte.
+ public static string GetTextBetweenRegex(string ContainingText, Regex StartRegex, Regex StopRegex, ref int StartAtPos)
+ {
+ string result = string.Empty;
+ Match MatchStart = StartRegex.Match(ContainingText, StartAtPos);
+ if (MatchStart.Success)
+ {
+ int CntStart = MatchStart.Index + MatchStart.Length;
+ Match MatchStop = StopRegex.Match(ContainingText, CntStart);
+ if (MatchStop.Success)
+ {
+ int CntStop = MatchStop.Index;
+ StartAtPos = CntStop + MatchStop.Length;
+ result = ContainingText.Substring(CntStart, (CntStop - CntStart));
+ }
+ else
+ {
+ StartAtPos = -1;
+ }
+ }
+ else
+ {
+ StartAtPos = -1;
+ }
+ return result;
+ }
+
+ ///
+ /// Führt einen binären Vergleich zweier Dateien durch.
+ ///
+ /// Pfad zu Datei 1
+ /// Pfad zu Datei 2
+ /// Wahr, wenn die beiden Dateien binär identisch sind.
+ public static bool FileEquals(string fileName1, string fileName2)
+ {
+ if (!File.Exists(fileName1) || !File.Exists(fileName2))
+ return false;
+
+ FileInfo info1 = new FileInfo(fileName1);
+ FileInfo info2 = new FileInfo(fileName2);
+ bool same = info1.Length == info2.Length;
+
+ if (same)
+ {
+ using (FileStream fs1 = info1.OpenRead())
+ using (FileStream fs2 = info2.OpenRead())
+ using (BufferedStream bs1 = new BufferedStream(fs1))
+ using (BufferedStream bs2 = new BufferedStream(fs2))
+ {
+ for (long i = 0; i < info1.Length; i++)
+ {
+ if (bs1.ReadByte() != bs2.ReadByte())
+ {
+ same = false;
+ break;
+ }
+ }
+ }
+ }
+
+ return same;
+ }
+
+ ///
+ /// Erzeugt einen Dateinamen für einen angegebenen String.
+ /// Dabei werden aus dem String alle ungültigen Zeichen entweder ersetzt oder entfernt.
+ ///
+ /// Der String
+ /// Einen Dateinamen
+ public static string GetFilenameFor(string name)
+ {
+ string filename = Regex.Replace(name, @"[/\<>]", "-");
+ filename = Regex.Replace(filename, @"['""]", "");
+ filename = filename.Trim();
+ filename = filename.TrimEnd('.');
+ return filename;
+ }
+
+ }
+}