/// <summary> /// Creates a directory tree, with all intermediate branches /// </summary> /// <param name="Directory">The directory to create</param> public static void CreateDirectoryTree(DirectoryReference Directory) { if (!DirectoryReference.Exists(Directory)) { CreateDirectoryTree(Directory.ParentDirectory); DirectoryReference.CreateDirectory(Directory); } }
/// <summary> /// Saves a file to disk, using the binary formatter /// </summary> /// <param name="Location">File to write to</param> /// <param name="Object">Object to serialize</param> public static void Save(FileReference Location, object Object) { DirectoryReference.CreateDirectory(Location.Directory); using (FileStream Stream = new FileStream(Location.FullName, FileMode.Create, FileAccess.Write)) { BinaryFormatter Formatter = new BinaryFormatter(); Formatter.Serialize(Stream, Object); } }
/// <summary> /// Saves a file to disk using the binary formatter, without updating the timestamp if it hasn't changed /// </summary> /// <param name="Location">File to write to</param> /// <param name="Object">Object to serialize</param> public static void SaveIfDifferent(FileReference Location, object Object) { byte[] Contents; using (MemoryStream Stream = new MemoryStream()) { BinaryFormatter Formatter = new BinaryFormatter(); Formatter.Serialize(Stream, Object); Contents = Stream.ToArray(); } DirectoryReference.CreateDirectory(Location.Directory); FileReference.WriteAllBytesIfDifferent(Location, Contents); }
/// <summary> /// Saves all the scope information to a file /// </summary> public static void Flush() { string TelemetryDir = Environment.GetEnvironmentVariable("UE_TELEMETRY_DIR"); if (TelemetryDir != null) { FileReference File; using (Process Process = Process.GetCurrentProcess()) { DirectoryReference TelemetryDirRef = new DirectoryReference(TelemetryDir); DirectoryReference.CreateDirectory(TelemetryDirRef); string FileName = String.Format("{0}.{1}.json", Path.GetFileName(Assembly.GetEntryAssembly().Location), Process.Id, Process.StartTime.Ticks); File = FileReference.Combine(TelemetryDirRef, FileName); } using (JsonWriter Writer = new JsonWriter(File)) { Writer.WriteObjectStart(); Writer.WriteArrayStart("Spans"); foreach (TraceSpanImpl Span in Spans) { if (Span.FinishTime != null) { Writer.WriteObjectStart(); Writer.WriteValue("Name", Span.Name); if (Span.Resource != null) { Writer.WriteValue("Resource", Span.Resource); } if (Span.Service != null) { Writer.WriteValue("Service", Span.Service); } Writer.WriteValue("StartTime", Span.StartTime.ToString("o", CultureInfo.InvariantCulture)); Writer.WriteValue("FinishTime", Span.FinishTime.Value.ToString("o", CultureInfo.InvariantCulture)); Writer.WriteObjectStart("Metadata"); foreach (KeyValuePair <string, string> Pair in Span.Metadata) { Writer.WriteValue(Pair.Key, Pair.Value); } Writer.WriteObjectEnd(); Writer.WriteObjectEnd(); } } Writer.WriteArrayEnd(); Writer.WriteObjectEnd(); } } }
/// <summary> /// Save a JSON object to a file on disk /// </summary> /// <param name="Location">The location of the file to read</param> /// <param name="Object">The object to save</param> public static void Save(FileReference Location, object Object) { string Text = Serialize(Object); try { DirectoryReference.CreateDirectory(Location.Directory); FileReference.WriteAllText(Location, Text); } catch (Exception Ex) { throw new Exception(String.Format("Unable to write '{0}'", Location), Ex); } }
/// <summary> /// Adds a trace listener that writes to a log file /// </summary> /// <param name="OutputFile">The file to write to</param> /// <returns>The created trace listener</returns> public static TextWriterTraceListener AddFileWriter(string Name, FileReference OutputFile) { try { Log.OutputFile = OutputFile; DirectoryReference.CreateDirectory(OutputFile.Directory); TextWriterTraceListener LogTraceListener = new TextWriterTraceListener(new StreamWriter(OutputFile.FullName), Name); Trace.Listeners.Add(LogTraceListener); return(LogTraceListener); } catch (Exception Ex) { throw new Exception(String.Format("Unable to open log file for writing ({0})", OutputFile), Ex); } }