Разница между File.Open () и new FIleStream () - PullRequest
20 голосов
/ 04 марта 2010

Какая разница, если есть?

Ответы [ 3 ]

24 голосов
/ 04 марта 2010

Отсутствует.

File.Open, внутренне, не более чем:

public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share)
{
    return new FileStream(path, mode, access, share);
}

Если вы не используете перегрузку, которая указывает FileAccess и FileShare, она указывает это для вас (используя FileShare.None и FileAccess.Write при добавлении или ReadWrite в противном случае).

При этом, это деталь реализации, а не часть документации . Технически, будущий выпуск .NET Framework может использовать другую реализацию, хотя я нахожу это маловероятным.

22 голосов
/ 04 марта 2010

Такое дублирование очень редко встречается в .NET Framework. Но есть история об этом, рассказанная Кшиштофом Квалиной в этой лекции . Они провели исследование юзабилити на ранних версиях фреймворка, попросив группу опытных (но не зависимых от .NET) программистов написать некоторый код с использованием классов FileStream и StreadReader / Writer.

Всё пошло не так, они получили 100% отказов. В ответ они добавили методы к классу System.IO.File, используя подход «скорее всего, попадет в пропасть успеха».

Кстати, классное видео, если вы вообще не понимаете, почему фреймворк выглядит так, как он выглядит.

Лучше опубликовать реальный ответ: метод File.Open () вызывает конструктор FileStream, передавая значения для FileAccess и FileShare (если вы их не указали), которые, скорее всего, поступят правильно. Что такое FileAccess.ReadWrite и FileShare.None.

5 голосов
/ 04 марта 2010

File.Open() - это удобный метод.Внутренне это реализовано так:

public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share)
{
    return new FileStream(path, mode, access, share);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...