您的位置:首页 > 编程语言 > ASP

如何实现IEnumerable<T>和IEnumerator接口,一个ASP.NET MVC日志模型的实现

2011-08-28 15:58 846 查看
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;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐