Skip to content

Commit 95e555a

Browse files
committed
Adding file watcher instead for infinite loop
1 parent 710c1aa commit 95e555a

File tree

2 files changed

+38
-11
lines changed

2 files changed

+38
-11
lines changed

CSMDevHelper/LogReader.cs

+15-6
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,32 @@ abstract class LogReader
4747
protected static string logModelingPattern = @"^=+";
4848
protected bool m_isModeling;
4949
protected CSMEvent csmevent;
50+
static int readPosition = 0;
5051

5152
protected LogReader(string filename, bool fromBeginning)
5253
{
53-
this.m_fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite|FileShare.Delete|FileShare.Inheritable);
54-
this.m_streamReader = new StreamReader(m_fileStream);
55-
this.m_isModeling = false;
54+
m_fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite| FileShare.Delete);
55+
m_streamReader = new StreamReader(m_fileStream);
56+
m_isModeling = false;
5657
if (fromBeginning)
5758
{
58-
this.m_fileStream.Seek(0, SeekOrigin.Begin);
59+
//this.m_fileStream.Seek(0, SeekOrigin.Begin);
60+
m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
5961
}
6062
else
6163
{
62-
this.m_fileStream.Seek(0, SeekOrigin.End);
64+
//this.m_fileStream.Seek(0, SeekOrigin.End);
65+
m_streamReader.BaseStream.Seek(0, SeekOrigin.End);
6366
}
6467
}
6568

66-
~LogReader() { }
69+
public void Close()
70+
{
71+
m_streamReader.Close();
72+
//m_fileStream.Close();
73+
}
74+
75+
~LogReader() {}
6776

6877

6978
public virtual LogResult Process()

CSMDevHelper/frmCSMDH.cs

+23-5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Windows.Forms;
99
using System.Threading;
1010
using System.Reflection;
11+
using System.IO;
1112

1213
namespace CSMDevHelper
1314
{
@@ -32,6 +33,8 @@ public partial class frmCSMDH : Form
3233
private EventWaitHandle waitHandle;
3334
private ThreadState threadState;
3435
private FormState formState;
36+
private LogReader m_logReader;
37+
private FileSystemWatcher m_watcher;
3538

3639
public frmCSMDH()
3740
{
@@ -80,7 +83,6 @@ public frmCSMDH()
8083
private void btnLogStart_Click(object sender, EventArgs e)
8184
{
8285
this.threadState = ThreadState.RUN;
83-
LogReader logReader;
8486
listNode.Clear();
8587
listFilterNode.Clear();
8688
tbEvent.Clear();
@@ -103,20 +105,27 @@ private void btnLogStart_Click(object sender, EventArgs e)
103105
btnLogStop.Enabled = true;
104106
btnLogPause.Enabled = true;
105107

108+
m_watcher = new FileSystemWatcher();
109+
m_watcher.Path = Path.GetDirectoryName(log_filename);
110+
m_watcher.Filter = Path.GetFileName(log_filename);
111+
m_watcher.NotifyFilter = NotifyFilters.LastWrite;
112+
m_watcher.Changed += new FileSystemEventHandler(watcher_OnChanged);
113+
m_watcher.EnableRaisingEvents = true;
114+
106115
try
107116
{
108117
if ((rbtnAuto.Checked &&
109118
registryHandler.DriverVersion == enumDriverVersion.CP5000) ||
110119
rbtnCP.Checked)
111120
{
112-
logReader = new LogCPReader(log_filename, !chkTailing.Checked);
121+
m_logReader = new LogCPReader(log_filename, !chkTailing.Checked);
113122
}
114123
else if ((rbtnAuto.Checked &&
115124
(registryHandler.DriverVersion == enumDriverVersion.MCD4x ||
116125
registryHandler.DriverVersion == enumDriverVersion.MCD5x)) ||
117126
rbtnMCD.Checked)
118127
{
119-
logReader = new LogMCDReader(log_filename, !chkTailing.Checked);
128+
m_logReader = new LogMCDReader(log_filename, !chkTailing.Checked);
120129
}
121130
else
122131
{
@@ -137,11 +146,16 @@ private void btnLogStart_Click(object sender, EventArgs e)
137146
logThread.Name = "LogReaderThread";
138147
logThread.Priority = ThreadPriority.Lowest;
139148
logThread.IsBackground = true;
140-
logThread.Start(logReader);
149+
logThread.Start(m_logReader);
141150
while (!logThread.IsAlive);
142151
blockControls(sender, e);
143152
}
144153

154+
private void watcher_OnChanged(object sender, FileSystemEventArgs e)
155+
{
156+
Console.WriteLine("The file {0} has been changed, changed", e.Name);
157+
}
158+
145159
private void btnLogStop_Click(object sender, EventArgs e)
146160
{
147161
this.threadState = ThreadState.STOP;
@@ -153,6 +167,10 @@ private void btnLogStop_Click(object sender, EventArgs e)
153167
btnLogPause.Enabled = false;
154168
btnLogPause.Text = "Pause";
155169
unblockControls(sender, e);
170+
if (m_logReader != null)
171+
{
172+
m_logReader.Close();
173+
}
156174
}
157175

158176
private void btnLogPause_Click(object sender, EventArgs e)
@@ -633,7 +651,7 @@ private void openLogFile(object sender, EventArgs e)
633651
if (dialog.ShowDialog() == DialogResult.OK)
634652
{
635653
log_filename = dialog.FileName;
636-
if (log_filename.Equals(default_log_filename,StringComparison.CurrentCultureIgnoreCase))
654+
if (log_filename.Equals(default_log_filename, StringComparison.CurrentCultureIgnoreCase))
637655
{
638656
rbtnAuto.Visible = true;
639657
rbtnMCD.Visible = false;

0 commit comments

Comments
 (0)