В чем разница между File и FileInfo в С#?

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

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

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

Ответ 1

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

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

Ответ 2

"Методы классов 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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Для управления свойствами контроля доступа может потребоваться FileInfo. Для остальных это выбор Static versus Instance, и вы можете выбрать, что удобно.

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

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