Никто ничего не просит в одно и то же время ...

ли открыть файл в .NET с неисключительным доступом для записи? Если так, то как? Я надеюсь, что два или более процесса будут записывать в один и тот же файл одновременно.

Редактировать: Вот контекст этого вопроса: я пишу простой HTTPModule для IIS. Поскольку приложения, работающие в разных пулах приложений, выполняются как отдельные процессы, мне нужен способ совместного использования файла журнала между процессами. Я мог бы написать сложную подпрограмму блокировки файла или ленивого писателя, но это - проект, от которого отказываются, так что это не важно.

Это тестовый код, который я использовал, чтобы выяснить процесс.

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;
        }
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос