Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.IO;
- using System.Threading;
- namespace FileOpenTest
- {
- class Program
- {
- private static bool keepGoing = true;
- static void Main(string[] args)
- {
- Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
- Console.Write("Enter name: ");
- string name = Console.ReadLine();
- //Open the file in a shared write mode
- FileStream fs = new FileStream("file.txt",
- FileMode.OpenOrCreate,
- FileAccess.ReadWrite,
- FileShare.ReadWrite);
- while (keepGoing)
- {
- AlmostGuaranteedAppend(name, fs);
- Console.WriteLine(name);
- Thread.Sleep(1000);
- }
- fs.Close();
- fs.Dispose();
- }
- private static void AlmostGuaranteedAppend(string stringToWrite, FileStream fs)
- {
- StreamWriter sw = new StreamWriter(fs);
- //Force the file pointer to re-seek the end of the file.
- //THIS IS THE KEY TO KEEPING MULTIPLE PROCESSES FROM STOMPING
- //EACH OTHER WHEN WRITING TO A SHARED FILE.
- fs.Position = fs.Length;
- //Note: there is a possible race condition between the above
- //and below lines of code. If a context switch happens right
- //here and the next process writes to the end of the common
- //file, then fs.Position will no longer point to the end of
- //the file and the next write will overwrite existing data.
- //For writing periodic logs where the chance of collision is
- //small, this should work.
- sw.WriteLine(stringToWrite);
- sw.Flush();
- }
- private static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
- {
- keepGoing = false;
- }
- }
- }
- new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
Add Comment
Please, Sign In to add comment