namespace MyMvcApp.Models
{
public class LogsModel:IEnumerable<IDictionary<string,string>>,IEnumerator<IDictionary<string,string>>
{
private TextReader reader;
private IDictionary<string, string> currentLog;
private string logFileName { get; set; }
public int LogCount { get; set; }
public LogsModel(string logFileName = @"logs\sys.log")
{
currentLog = new Dictionary<string, string>();
this.logFileName = AppDomain.CurrentDomain.BaseDirectory + logFileName;
InitLogReader(this.logFileName);
}
public void CloseLogFile()
{
if (reader != null)
{
reader.Close();
reader = null;
}
}
public long LogByteSize
{
get
{
FileInfo fi = new FileInfo(logFileName);
return fi.Length;
}
}
public void ClearLog()
{
CloseLogFile();
TextWriter writer = new StreamWriter(logFileName,false);
writer.Write("");
writer.Close();
}
private void InitLogReader(string logFileName)
{
try
{
reader = new StreamReader(logFileName);
}
catch (FileNotFoundException e)
{
File.CreateText(logFileName);
throw (e);
}
finally
{
reader = new StreamReader(logFileName);
}
}
public IDictionary<string, string> Current
{
get
{
string line = reader.ReadLine();
try
{
if (!string.IsNullOrEmpty(line))
{
foreach (string pair in line.Split(';'))
{
string[] keyValue = pair.Split(':');
string key = keyValue[0];
string value = keyValue[1];
if (keyValue.Length > 2)
{
value += ":" + keyValue[2];
}
currentLog.Add(key, value);
}
}
return currentLog;
}
catch (Exception e)
{
throw e;
}
}
}
object IEnumerator.Current
{
get
{
return Current;
}
}
public void Reset()
{
CloseLogFile();
LogCount = 0;
InitLogReader(logFileName);
}
public bool MoveNext()
{
currentLog.Clear();
if (reader.Peek() > -1)
{
LogCount++;
return true;
}
CloseLogFile();
return false;
}
void IEnumerator.Reset()
{
Reset();
}
bool IEnumerator.MoveNext()
{
return MoveNext();
}
public void Dispose()
{
CloseLogFile();
}
public IEnumerator<IDictionary<string,string>> GetEnumerator()
{
return this;
}
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator)this;
}
}
}