Можно ли перевести FileStream из режима «Только чтение» в режим «Чтение и запись»? - PullRequest
1 голос
/ 22 июля 2010

Есть ли способ продвижения FileStream только для чтения для чтения-записи?Я ищу функциональность, аналогичную функции Win32 SDK ReOpenFile.

Ответы [ 2 ]

1 голос
/ 22 июля 2010

Вот, пожалуйста.Использует немного 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);
0 голосов
/ 22 июля 2010

Вы не можете.

Почему вы открываете его только для чтения? Почему бы вам просто не открыть новый FileStream? Вам даже не нужно закрывать старый, при условии, что FileShare установлен правильно.

...