Почему FileShare не работает должным образом? - PullRequest
1 голос
/ 20 августа 2011

При написании кода, связанного с журналами и файлами, я обнаружил некоторое странное поведение в файле Windows io.Кто-нибудь знает, почему этот тест не пройден с сообщением «не удается прочитать файл»?

[TestMethod]
public void SouldAllowReads()
{
    using (var file = File.Open(_path, FileMode.Create, FileAccess.Write, FileShare.Read))
    {
        using (var file2 = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            //works ok, doesn't throw
        }

        try
        {
            using (var file3 = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read))
            { 
                //fails
            }
        }
        catch (IOException)
        {
            Assert.Fail("cannot read file");
        }
    }
}

PS._path = Path.GetTempFileName ();

РЕДАКТИРОВАТЬ:

Я отмечу одиннадцать ответов как правильный, но есть одна вещь, которая беспокоит меня в этом дизайне.Методы .NET, такие как File.ReadAllText (_path), генерируют исключения, которые просто не должны происходить.

Например, при выполнении этого теста мой тест также не прошел бы утверждение:

        try
        {
            string text = File.ReadAllText(_path);
        }
        catch (IOException)
        {
            Assert.Fail("cannot read file");
        }

1 Ответ

3 голосов
/ 20 августа 2011

У вас есть var file = open с FileAccess.Write и в то же время вы пытаетесь открыть var file3 = с файловым режимом FileShare.Read, который не разрешает одновременный доступ на запись.

...