public static bool TryRead(string FileName, out BuildUserMetadata OutMetadata, TextWriter Log) { // Try to read the file string[] Lines; try { Lines = File.ReadAllLines(FileName); } catch(Exception Ex) { Log.WriteException(Ex, "Couldn't read {0}", FileName); OutMetadata = null; return false; } // Read all the key-value pairs from the file Dictionary<string, string> Pairs = new Dictionary<string,string>(); foreach(string Line in Lines) { int EqualsIdx = Line.IndexOf('='); if(EqualsIdx != -1) { Pairs.Add(Line.Substring(0, EqualsIdx).Trim(), Line.Substring(EqualsIdx + 1).Trim()); } } // Separate out the strings BuildUserMetadata Metadata = new BuildUserMetadata(); if(Pairs.TryGetValue("User", out Metadata.User) && Pairs.TryGetValue("Message", out Metadata.Message)) { string Quality; if(Pairs.TryGetValue("Quality", out Quality) && Enum.TryParse<BuildQuality>(Quality, out Metadata.Quality)) { OutMetadata = Metadata; return true; } } // OutMetadata = null; return false; }