Вот, пожалуйста.Использует немного pInvoke Interop добра (дурности), но он это сделает.Я сэкономил и добавил некоторые магические константы для параметров access и sharemode, поэтому не стесняйтесь инкапсулировать это.
private static void Main()
{
using (FileStream fs = new FileStream(@"..\..\Program.cs", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (TextReader tr = new StreamReader(fs))
{
Console.WriteLine(tr.ReadToEnd());
using (FileStream fs1 = new FileStream(ReOpenFile(fs.SafeFileHandle, 3, 3, 0), FileAccess.ReadWrite))
{
fs1.Seek(0, SeekOrigin.End);
using (TextWriter tw = new StreamWriter(fs1))
{
tw.WriteLine("/* this should be all right */");
}
}
}
}
}
[DllImport("kernel32", SetLastError = true)]
private static extern SafeFileHandle ReOpenFile(SafeFileHandle hOriginalFile, uint dwAccess, uint dwShareMode, uint dwFlags);