1 | using System;
|
---|
2 | using System.Collections.Generic;
|
---|
3 | using System.IO;
|
---|
4 | using System.Text;
|
---|
5 | using System.Text.RegularExpressions;
|
---|
6 | using System.Xml;
|
---|
7 |
|
---|
8 | namespace xmlTools
|
---|
9 | {
|
---|
10 | /// <summary>
|
---|
11 | /// Utilities class. Contain function used along all the program and classes.
|
---|
12 | /// </summary>
|
---|
13 | class Util
|
---|
14 | {
|
---|
15 | /// <summary>
|
---|
16 | /// Backup a file, return true if sucessful otherwise returns false
|
---|
17 | /// </summary>
|
---|
18 | /// <param name="file"></param>
|
---|
19 | static public bool backupFile(string file)
|
---|
20 | {
|
---|
21 | try
|
---|
22 | {
|
---|
23 | System.IO.File.Copy(file, file + ".bak", false); //make a backup first //false is to not override already created backups
|
---|
24 | }
|
---|
25 | catch (Exception e)
|
---|
26 | {
|
---|
27 | Program.printAppError(Program.appErrors.BACKUPS_ALREADY_EXISTS, "Couldn't backup file " + file + " :\n" + e.Message);
|
---|
28 | return false;
|
---|
29 | }
|
---|
30 | return true;
|
---|
31 | }
|
---|
32 |
|
---|
33 | /// <summary>
|
---|
34 | /// Get all elements with a determined name and optionally a parent name. Result is saved on the paremeter list "result"
|
---|
35 | /// </summary>
|
---|
36 | /// <param name="rootNode"></param>
|
---|
37 | /// <param name="result"></param>
|
---|
38 | /// <param name="posElement"></param>
|
---|
39 | /// <param name="posParentElement"></param>
|
---|
40 | public static void getAllSpecificElements(XmlNode rootNode, ref List<XmlNode> result, String posElement, String posParentElement = "")
|
---|
41 | {
|
---|
42 | foreach (XmlNode element in rootNode.ChildNodes)
|
---|
43 | {
|
---|
44 | if (element.Name == posElement && (posParentElement == "" || posParentElement == element.ParentNode.Name))
|
---|
45 | {
|
---|
46 | result.Add(element);
|
---|
47 | continue;
|
---|
48 | }
|
---|
49 | getAllSpecificElements(element, ref result, posElement, posParentElement); //If not found in this node continue search in subnodes
|
---|
50 | }
|
---|
51 | }
|
---|
52 |
|
---|
53 | /// <summary>
|
---|
54 | /// Converts a string to a xmlNode. Throws XmlException if the parsing of xml fails.
|
---|
55 | /// </summary>
|
---|
56 | /// <param name="xmlContent"></param>
|
---|
57 | /// <returns></returns>
|
---|
58 | public static XmlNode stringToXmlNode(string xmlContent)
|
---|
59 | {
|
---|
60 | XmlDocument doc = new XmlDocument();
|
---|
61 | try
|
---|
62 | {
|
---|
63 | doc.LoadXml(xmlContent);
|
---|
64 | }
|
---|
65 | catch (XmlException e)
|
---|
66 | {
|
---|
67 | throw e;
|
---|
68 | }
|
---|
69 | return doc.DocumentElement;
|
---|
70 | }
|
---|
71 |
|
---|
72 | /// <summary>
|
---|
73 | /// Gets all xml files in the same directory of the executable
|
---|
74 | /// </summary>
|
---|
75 | /// <returns></returns>
|
---|
76 | static public List<String> getAllXmlFiles()
|
---|
77 | {
|
---|
78 | return getXmlFilesWildcard("*.xml");
|
---|
79 | }
|
---|
80 |
|
---|
81 | /// <summary>
|
---|
82 | /// Converts wildcard to regex and uses it to make the match
|
---|
83 | /// </summary>
|
---|
84 | /// <param name="filewildcard"></param>
|
---|
85 | /// <returns></returns>
|
---|
86 | public static List<String> getXmlFilesWildcard(String filewildcard)
|
---|
87 | {
|
---|
88 | List<String> xmlFiles = new List<String>();
|
---|
89 |
|
---|
90 | String dir = Path.GetDirectoryName(filewildcard); // Get the specified directory
|
---|
91 | if (dir == "")
|
---|
92 | {
|
---|
93 | dir = Util.getExePath();
|
---|
94 | }
|
---|
95 | String wildcard = Path.GetFileName(filewildcard); // Get files/wildcard
|
---|
96 | String[] files = System.IO.Directory.GetFiles(dir); //Get all files in specified directory
|
---|
97 |
|
---|
98 | foreach (String file in files)
|
---|
99 | {
|
---|
100 | Regex wildcardRegex = new Regex(Util.WildcardToRegex(wildcard), RegexOptions.IgnoreCase); //case insensitivity
|
---|
101 | if (wildcardRegex.IsMatch(Path.GetFileName(file)))
|
---|
102 | {
|
---|
103 | xmlFiles.Add(file);
|
---|
104 | }
|
---|
105 | }
|
---|
106 |
|
---|
107 | return xmlFiles;
|
---|
108 | }
|
---|
109 |
|
---|
110 | /// <summary>
|
---|
111 | /// Converts wildcard to regex (from here: http://www.codeproject.com/Articles/11556/Converting-Wildcards-to-Regexes)
|
---|
112 | /// </summary>
|
---|
113 | /// <param name="pattern"></param>
|
---|
114 | /// <returns></returns>
|
---|
115 | private static string WildcardToRegex(string pattern)
|
---|
116 | {
|
---|
117 | return "^" + Regex.Escape(pattern).
|
---|
118 | Replace("\\*", ".*").
|
---|
119 | Replace("\\?", ".") + "$";
|
---|
120 | }
|
---|
121 |
|
---|
122 | /// <summary>
|
---|
123 | /// Check when a string contains a wildcard or not
|
---|
124 | /// </summary>
|
---|
125 | /// <param name="myString"></param>
|
---|
126 | /// <returns></returns>
|
---|
127 | public static bool containsWildcard(String myString)
|
---|
128 | {
|
---|
129 | return (myString.Contains("*") || myString.Contains("?"));
|
---|
130 | }
|
---|
131 |
|
---|
132 | public static string getExePath()
|
---|
133 | {
|
---|
134 | return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
|
---|
135 | }
|
---|
136 |
|
---|
137 | public static string getExeFileName()
|
---|
138 | {
|
---|
139 | return Environment.GetCommandLineArgs()[0];
|
---|
140 | }
|
---|
141 |
|
---|
142 | public static bool IsRunningOnMono()
|
---|
143 | {
|
---|
144 | return Type.GetType("Mono.Runtime") != null;
|
---|
145 | }
|
---|
146 |
|
---|
147 | public static bool ContainsIgnoreCase(string source, string sToSearch)
|
---|
148 | {
|
---|
149 | return source.IndexOf(sToSearch, StringComparison.OrdinalIgnoreCase) >= 0;
|
---|
150 | }
|
---|
151 |
|
---|
152 | // Thanks DarthDevilous for the regex! http://forums.thedailywtf.com/forums/t/2478.aspx
|
---|
153 | public static string[] stringToArgsArray(string args)
|
---|
154 | {
|
---|
155 | MatchCollection ms = Regex.Matches(args, "([^\" ]*(\"[^\"]*\")[^\" ]*)|[^\" ]+");
|
---|
156 | List<string> listArgs=new List<string>();
|
---|
157 | foreach (Match m in ms)
|
---|
158 | {
|
---|
159 | listArgs.Add(m.Value.Replace("\"","")); //remove quotes or it will cause an error
|
---|
160 | }
|
---|
161 | return listArgs.ToArray();
|
---|
162 | }
|
---|
163 | }
|
---|
164 | }
|
---|