This repository has been archived on 2024-04-07. You can view files and clone it, but cannot push or open issues or pull requests.
chovy-gm/GMAssetCompiler/Trace.cs

118 lines
3.0 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Windows.Forms;
namespace GMAssetCompiler
{
public class Trace
{
public static FileStream _storageFileStream;
public static StreamWriter _streamWriter;
public static string Filename
{
get;
set;
}
static Trace()
{
string executablePath = Application.ExecutablePath;
string directoryName = Path.GetDirectoryName(executablePath);
if (!Directory.Exists(directoryName))
{
Directory.CreateDirectory(directoryName);
}
string[] files = Directory.GetFiles(directoryName, "*.gz");
TimeSpan t = new TimeSpan(30, 0, 0, 0, 0);
string[] array = files;
foreach (string text in array)
{
FileInfo fileInfo = new FileInfo(text);
if (TimeSpan.Compare(DateTime.Now.Subtract(fileInfo.CreationTime), t) > 0)
{
File.Delete(text);
}
}
Filename = Path.Combine(directoryName, "TraceGMA.log");
if (File.Exists(Filename))
{
FileInfo fileInfo2 = new FileInfo(Filename);
if (fileInfo2.Length > 204800)
{
string path = string.Format("trace-{0}.gz", DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss"));
using (FileStream fileStream2 = fileInfo2.OpenRead())
{
using (FileStream fileStream = new FileStream(Path.Combine(directoryName, path), FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
{
using (GZipStream gZipStream = new GZipStream(fileStream, CompressionMode.Compress))
{
byte[] array2 = new byte[2048];
bool flag = false;
while (!flag)
{
fileStream2.Position = 0L;
fileStream.Position = 0L;
try
{
int num2;
for (long num = 0L; num < fileInfo2.Length; num += num2)
{
num2 = fileStream2.Read(array2, 0, array2.Length);
gZipStream.Write(array2, 0, num2);
}
}
finally
{
gZipStream.Close();
fileStream.Close();
fileStream2.Close();
flag = true;
}
}
}
}
}
File.Delete(Filename);
}
}
}
~Trace()
{
_storageFileStream.Close();
}
public static void Write(string message)
{
using (_storageFileStream = new FileStream(Filename, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
using (_streamWriter = new StreamWriter(_storageFileStream))
{
_streamWriter.AutoFlush = true;
_streamWriter.WriteLine(message);
_streamWriter.Flush();
bool isAttached = Debugger.IsAttached;
}
}
}
public static void Write(string message, params object[] _arguments)
{
using (_storageFileStream = new FileStream(Filename, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
using (_streamWriter = new StreamWriter(_storageFileStream))
{
_streamWriter.AutoFlush = true;
_streamWriter.WriteLine(message, _arguments);
_streamWriter.Flush();
bool isAttached = Debugger.IsAttached;
}
}
}
}
}