am trying to create a service that will try to create a service that will monitor a folder. Whenever a new file gets created, I am trying to read the contents of new file and copy contents (with same file) at a new location.
The problem I am facing is that only first file that gets its name copied and a file created at a new location, but without any contents. The subsequent files do not get created at all.
My Services.cs looks like this:-
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
FileSystemWatcher Watcher = new FileSystemWatcher();
Watcher.Path = "C:\\logs\\BOR";
Watcher.IncludeSubdirectories = true;
Watcher.Created += new FileSystemEventHandler(Watcher_Changed);
Watcher.EnableRaisingEvents = true;
}
private static void Watcher_Changed(object sender, FileSystemEventArgs e)
{
var CopyContents = new Thread(() => ThreadProcedure(e));
CopyContents.IsBackground = true;
CopyContents.Start();
}
private static void ThreadProcedure(FileSystemEventArgs e)
{
Thread.Sleep(10000);
int counter = 0;
string line;
// Read the file and display it line by line.
System.IO.StreamReader file =
new System.IO.StreamReader(e.FullPath);
string testfilepath = "C:\\Project Tests\\testfile\\" + e.Name;
File.Create(testfilepath);
var log = new StreamWriter(testfilepath);
while ((line = file.ReadLine()) != null)
{
log.WriteLine(line);
counter++;
}
log.Close();
file.Close();
}
protected override void OnStop()
{
}
}
Ashutosh ParabPosted Feb 11, 2015, 1:52 AM
The issue is resolved now. The problem was that File.Create opened a handle to the new file and so when I tried to open new writerstream , I got an exception that the file is already being used by another process and so the service threw exception.