// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using System.Text; using System.IO; namespace UnrealBuildTool { class ResponseFile { [FlagsAttribute] public enum CreateOptions { /// /// /// None = 0x0, /// /// /// WriteEvenIfUnchanged = 0x1 } /// /// Creates a file from a list of strings; each string is placed on a line in the file. /// /// Name of response file /// List of lines to write to the response file /// public static FileReference Create(FileReference TempFileName, IEnumerable Lines, CreateOptions Options = CreateOptions.None) { FileInfo TempFileInfo = new FileInfo(TempFileName.FullName); if (TempFileInfo.Exists) { if ((Options & CreateOptions.WriteEvenIfUnchanged) != CreateOptions.WriteEvenIfUnchanged) { string Body = string.Join(Environment.NewLine, Lines); // Reuse the existing response file if it remains unchanged string OriginalBody = File.ReadAllText(TempFileName.FullName); if (string.Equals(OriginalBody, Body, StringComparison.Ordinal)) { return TempFileName; } } // Delete the existing file if it exists and requires modification TempFileInfo.IsReadOnly = false; TempFileInfo.Delete(); TempFileInfo.Refresh(); } FileItem.CreateIntermediateTextFile(TempFileName, string.Join(Environment.NewLine, Lines)); return TempFileName; } } }