I don't know why you get the error, but I have some remarks. First of all, the lock is useless because you're just creating a new object each time.
Secondly, concatenating the lines like that is far from optimal: it creates a lot of string objects that are unnecessary. There are actually functions in the .NET Framework to read an entire file. You can replace your entire StreamReader-block with this line:
string fileContent = File.ReadAllText(e.FullPath, Encoding.Default);
I don't know why you get the
"file is locked" error, but I don't think it's your code that locks the file. It's the application that drops the file in the folder. If you want to reliably be able to read the file, you'll have to try to read it multiple times. A while ago, I've written a class that does this automatically: a wrapper around FileSystemWatcher. You can find it here:
http://tommycarlier.blogspot.com/2007/01/filecreationwatcher.html