using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; using System.Xml; namespace xmlTools { /// /// Utilities class. Contain function used along all the program and classes. /// class Util { /// /// Backup a file, return true if sucessful otherwise returns false /// /// static public bool backupFile(string file) { try { System.IO.File.Copy(file, file + ".bak", false); //make a backup first //false is to not override already created backups } catch (Exception e) { Program.printAppError(Program.appErrors.BACKUPS_ALREADY_EXISTS, "Couldn't backup file " + file + " :\n" + e.Message); return false; } return true; } /// /// Get all elements with a determined name and optionally a parent name. Result is saved on the paremeter list "result" /// /// /// /// /// public static void getAllSpecificElements(XmlNode rootNode, ref List result, String posElement, String posParentElement = "") { foreach (XmlNode element in rootNode.ChildNodes) { if (element.Name == posElement && (posParentElement == "" || posParentElement == element.ParentNode.Name)) { result.Add(element); continue; } getAllSpecificElements(element, ref result, posElement, posParentElement); //If not found in this node continue search in subnodes } } /// /// Converts a string to a xmlNode. Throws XmlException if the parsing of xml fails. /// /// /// public static XmlNode stringToXmlNode(string xmlContent) { XmlDocument doc = new XmlDocument(); try { doc.LoadXml(xmlContent); } catch (XmlException e) { throw e; } return doc.DocumentElement; } /// /// Gets all xml files in the same directory of the executable /// /// static public List getAllXmlFiles() { return getXmlFilesWildcard("*.xml"); } /// /// Converts wildcard to regex and uses it to make the match /// /// /// public static List getXmlFilesWildcard(String filewildcard) { List xmlFiles = new List(); String dir = Path.GetDirectoryName(filewildcard); // Get the specified directory if (dir == "") { dir = Util.getExePath(); } String wildcard = Path.GetFileName(filewildcard); // Get files/wildcard String[] files = System.IO.Directory.GetFiles(dir); //Get all files in specified directory foreach (String file in files) { Regex wildcardRegex = new Regex(Util.WildcardToRegex(wildcard), RegexOptions.IgnoreCase); //case insensitivity if (wildcardRegex.IsMatch(Path.GetFileName(file))) { xmlFiles.Add(file); } } return xmlFiles; } /// /// Converts wildcard to regex (from here: http://www.codeproject.com/Articles/11556/Converting-Wildcards-to-Regexes) /// /// /// private static string WildcardToRegex(string pattern) { return "^" + Regex.Escape(pattern). Replace("\\*", ".*"). Replace("\\?", ".") + "$"; } /// /// Check when a string contains a wildcard or not /// /// /// public static bool containsWildcard(String myString) { return (myString.Contains("*") || myString.Contains("?")); } public static string getExePath() { return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); } public static string getExeFileName() { return Environment.GetCommandLineArgs()[0]; } public static bool IsRunningOnMono() { return Type.GetType("Mono.Runtime") != null; } public static bool ContainsIgnoreCase(string source, string sToSearch) { return source.IndexOf(sToSearch, StringComparison.OrdinalIgnoreCase) >= 0; } // Thanks DarthDevilous for the regex! http://forums.thedailywtf.com/forums/t/2478.aspx public static string[] stringToArgsArray(string args) { MatchCollection ms = Regex.Matches(args, "([^\" ]*(\"[^\"]*\")[^\" ]*)|[^\" ]+"); List listArgs=new List(); foreach (Match m in ms) { listArgs.Add(m.Value.Replace("\"","")); //remove quotes or it will cause an error } return listArgs.ToArray(); } } }