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; + } + + } +}