【发布时间】:2013-10-25 08:43:20
【问题描述】:
我有一个方法
private string sLogFormat;
private string sErrorTime;
public void CreateLogFile(string path, string msg)
{
//sLogFormat used to create log files format :
// dd/mm/yyyy hh:mm:ss AM/PM ==> Log Message
sLogFormat = DateTime.Now.ToShortDateString().ToString() + " " + DateTime.Now.ToLongTimeString().ToString() + " ==> ";
//this variable used to create log filename format "
//for example filename : ErrorLogYYYYMMDD
string sYear = DateTime.Now.Year.ToString();
string sMonth = DateTime.Now.Month.ToString();
string sDay = DateTime.Now.Day.ToString();
sErrorTime = sYear + sMonth + sDay;
StreamWriter sw = new StreamWriter(path + sErrorTime, true);
sw.WriteLine(sLogFormat + msg);
sw.Flush();
sw.Close();
}
另一个触发 Onchanged 处理程序某处的方法 run()(它在更精确地更改文件夹内容时触发) 这里
public static void Run()
{
// Create a new FileSystemWatcher and set its properties.
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "C:/model_RCCMREC";
/* Watch for changes in LastAccess and LastWrite times, and
the renaming of files or directories. */
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
// watch wav files.
watcher.Filter = "*.wav";
// Add event handlers.
watcher.Created += new FileSystemEventHandler(OnChanged);
// Begin watching.
watcher.EnableRaisingEvents = true;
}
和 OnChanged 处理程序作为
public static void OnChanged(object source, FileSystemEventArgs e)
{
try
{
//access last folder(newly created one is suposedly at last position)
var directory = new DirectoryInfo("C:/model_RCCMREC");
var myFile = (from f in directory.GetFiles() orderby f.LastWriteTime descending select f).First();
//2.Split the file name.
}
catch
{
//I WANT TO ACCESS THE METHOD CreateLogFile(x,y) HERE
}
}
我无法从 OnChanged 处理程序中正常访问 CreateLogFile() 方法。如何访问它?
【问题讨论】:
-
OnChanged处理程序是否与CreateLogfile函数属于同一类?如果是这样,您可以使其成为非静态的。否则,您需要以某种方式给它一个类实例......这需要查看更多代码 -
那么您想要在哪个类的实例上调用该方法?不同的实例可能有不同的日志格式等。您需要您的
OnChanged处理程序是静态方法吗? -
为什么 OnChanged 是静态的?
-
我建议尽可能避免静态。尝试使 Run 非静态。如果那不可能,创建一个类来封装功能的逻辑,并使用
new FooClass()。 -
你为什么不让你的日志文件处理静态?