Endjin.Assembly.ChangeDetection.Infrastructure.TraceCfgParser.CreateTraceFile C# (CSharp) Method

CreateTraceFile() public static method

public static CreateTraceFile ( string filebaseName ) : TextWriter
filebaseName string
return System.IO.TextWriter
        public static TextWriter CreateTraceFile(string filebaseName)
        {
            var traceFileName = AddPIDAndAppDomainNameToFileName(Path.GetFullPath(filebaseName));
            var traceDir = Path.GetDirectoryName(traceFileName);

            FileStream fstream = null;
            var successFullyOpened = false;
            for (var i = 0; i < 2; i++) // Retry the open operation in case of errors
            {
                try
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(traceFileName)); // if the directory to the trace file does not exist create it
                    fstream = new FileStream(traceFileName, FileMode.Create, FileAccess.Write, FileShare.Read);
                    successFullyOpened = true;
                }
                catch (IOException) // try to open the file with another name in case of a locking error
                {
                    traceDir = traceFileName + Guid.NewGuid();
                }

                if (successFullyOpened)
                {
                    break;
                }
            }

            if (fstream != null)
            {
                TextWriter writer = new StreamWriter(fstream);
                // Create a synchronized TextWriter to enforce proper locking in case of concurrent tracing to file
                writer = TextWriter.Synchronized(writer);
                return writer;
            }

            return null;
        }