0
這是用C#編寫的。不斷讀取特定字符串的文件?
有一個日誌文件(log.txt),它在處理期間保持更新。當進程完成時,最後一行寫在日誌文件的末尾是「Process finished!」。沒有例外。
我要不斷地讀取文件,每秒也許四次,看看如果字符串顯示了,這樣,當過程結束後我就可以知道。
我想知道,什麼是做的最好的方法(簡單,光線和可靠的)?計時器? FileWatcherSyetem?還有別的嗎?
非常感謝!
這是用C#編寫的。不斷讀取特定字符串的文件?
有一個日誌文件(log.txt),它在處理期間保持更新。當進程完成時,最後一行寫在日誌文件的末尾是「Process finished!」。沒有例外。
我要不斷地讀取文件,每秒也許四次,看看如果字符串顯示了,這樣,當過程結束後我就可以知道。
我想知道,什麼是做的最好的方法(簡單,光線和可靠的)?計時器? FileWatcherSyetem?還有別的嗎?
非常感謝!
在裝配時,我用了一個定時器來定期檢查.txt文件的狀態,這樣的事情:
System.Timers.Timer _logFileCheckTimer;
public FijiLauncherControl()
{ // timer set up
_logFileCheckTimer = new System.Timers.Timer(250);
_logFileCheckTimer.Enabled = true;
_logFileCheckTimer.Elapsed += new System.Timers.ElapsedEventHandler(_logFileCheckTimer_Elapsed);
_logFileCheckTimer.Start(); // start the timer
}
void _logFileCheckTimer_Elapsed(object sender, EventArgs e)
{
if (_processOn && IsLogOn)
{
try
{
_processFinished = CheckStatuts(); // checking file status
if (_processFinished) // fire event if checking status returns true
{
OnIjmFinished(EventArgs.Empty);
_processOn = false;
_logFileCheckTimer.Stop();
}
}
catch (Exception ex)
{
}
}
}
在程序中。設置在將被觸發的dll一個事件,如果_processFinished = CheckStatuts();
返回true
:
//事件委託 公共委託無效IjmFinishedEventHandler(對象發件人,EventArgs的); 公共事件IjmFinishedEventHandler IjmFinished; //事件處理
protected virtual void OnIjmFinished(EventArgs e)
{
if (IjmFinished != null) // trigger event
IjmFinished(this, e);
}
在主應用程序,應該有事件接收器,這樣的事情:
private FijiLauncherControl _fl; // the object of your assembly
_fl.IjmFinished += new IjmFinishedEventHandler(_fl_IjmFinished); // event from the assembly should trigger an event handler
void _fl_IjmFinished(object sender, EventArgs e) // event handler
{
_vm.IjmFinished = true; // a boolean var in viewmodel in main app set to be true once the event from the assembly is triggered
//throw new NotImplementedException();
}
這應該做的工作。
請參閱:http://stackoverflow.com/questions/3791103/c-sharp-continuously-read-file – RW4
@ TheC4Fox如果我理解正確,那假定文件中的最新寫入信息總是排列在尾部。是這樣嗎? –
他寫的特殊功能,是的。重要的是你用Fileshare.ReadWrite打開一個FileStream,因爲你正在與另一個進程共享它。您可以修改該代碼以滿足您的需要。 – RW4