В чем разница между File и FileInfo в C #? - PullRequest
66 голосов
/ 25 августа 2009

Я читал, что статические методы класса File лучше использовать для выполнения небольших и небольших задач над файлом, таких как проверка, существует ли он, и что мы должны использовать экземпляр FileInfo Класс, если мы собираемся выполнить много операций над определенным файлом.

Я понимаю это и могу просто использовать это слепо, но мне хотелось бы знать, почему есть разница? Что из того, как они работают, делает их подходящими для разных ситуаций? Какой смысл иметь эти 2 разных класса, которые, кажется, делают одно и то же по-разному?

Было бы полезно, если бы кто-то мог ответить хотя бы на один из этих вопросов.

Ответы [ 9 ]

79 голосов
/ 25 августа 2009

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

Причина, по которой это делается, заключается в проверке безопасности при доступе к файлу. При создании экземпляра FileInfo проверка выполняется только один раз. Однако каждый раз, когда вы используете статический метод File, выполняется проверка.

6 голосов
/ 25 августа 2009

"Методы классов File и FileInfo схожи, но они отличаются в том, что методы класса File static , поэтому вам нужно передать больше параметров, чем было бы для методов Экземпляр FileInfo. Это необходимо сделать, поскольку он работает с определенным файлом, например, метод FileInfo.CopyTo () принимает один параметр для пути назначения, который используется для копирования файла, тогда как метод File.Copy () принимает два параметры для исходного пути и пути назначения. "

http://www.aspfree.com/c/a/C-Sharp/A-Look-at-C-Sharp-File-and-FileInfo-Classes/1/

http://www.intelliott.com/blog/PermaLink,guid,ce9edbdb-6484-47cd-a5d6-63335adae02b.aspx

5 голосов
/ 06 ноября 2012

File.Exists будет работать намного быстрее, чем новый FileInfo (filePath) .Exists - особенно по сети и при условии, что файлы действительно существуют. Это связано с тем, что File.Exists будет проверять только наличие файла, а новый FileInfo (filePath) .Exists сначала создает объект FileInfo, который содержит все свойства (даты, размер и т. Д.) Файла (если он существует).

По моему опыту, даже проверка на наличие 10 файлов по сети заметно быстрее (т.е. 20 мс против 200 мс) с помощью File.Exists.

3 голосов
/ 25 августа 2009

FileInfo может потребоваться для работы со свойствами контроля доступа. В остальном это выбор статики против экземпляра, и вы можете выбрать то, что удобно.

3 голосов
/ 25 августа 2009

Файл оптимизирован для одноразовых операций над файлом, FileInfo оптимизирован для нескольких операций над одним файлом, но, как правило, между реализациями различных методов не так много различий.

Если вы хотите сравнить точные реализации, используйте Reflector для просмотра обоих классов.

2 голосов
/ 13 апреля 2010

Да, и одной из причин может быть то, что Наг сказал, что Файлы - это служебный класс, и, следовательно, не требуется создавать экземпляр. В то же время, поскольку File является служебным классом, каждый раз требуется проверка безопасности.

С другой стороны, FileInfo требует создания экземпляра, и в этот момент он использует проверку безопасности. Таким образом, выполнение нескольких операций с использованием FileInfo не вызывает проверки безопасности.

1 голос
/ 13 января 2012

Недавно я столкнулся с проблемой File.Exist, я ненавижу эту функцию. После этого я использовал функцию Fileinfo class Exist, тогда моя программа работает правильно.

На самом деле то, что происходит в среде разработки File.Exist, работает хорошо, но когда она переходит в живую среду, эта функция блокирует объект файла, по этой причине я получаю сообщение об ошибке доступа и не могу использовать файл.

Это мое обучение. Я никогда не буду использовать File.Exist метод, лучше всего создать объект, а затем использовать его. Помните об использовании статических методов.

1 голос
/ 06 января 2010

FileInfo является экземпляром файла, таким образом представляя сам файл. Файл является служебным классом, поэтому может работать с любым файлом

0 голосов
/ 07 марта 2018

FileInfo:

  • Нужно создать экземпляр перед использованием
  • Содержит методы экземпляра
  • Кэшируйте информацию о файле, и вам нужно каждый раз вызывать Refresh для получения последней информации о файле

Файл:

  • Не нужно создавать экземпляр
  • Содержит статические методы
  • Не кэшируйте, поэтому вы получаете самую свежую информацию каждый раз, когда используете ее.

ЦСИ:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...