При написании кода, связанного с журналами и файлами, я обнаружил некоторое странное поведение в файле 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");
}