C#中的File和FileInfo有什么区别?

blu*_*nte 66 c# file

我一直在读的静态方法文件类最好是用在像检查,看看是否存在对文件执行小一些任务,我们应该使用的实例FileInfo的,如果我们要进行很多类对特定文件的操作.

我理解这一点,可以盲目地使用它,但我想知道为什么会有区别?它们的工作方式是什么使它们适合不同的情况?让这2个不同的类看起来以不同的方式做同样的事情有什么意义呢?

如果有人能够至少回答其中一个问题,将会很有帮助.

Joh*_*sch 81

通常,如果要对文件执行单个操作,请使用File该类.如果要对同一文件执行多个操作,请使用FileInfo.

这样做的原因是因为访问文件时进行了安全检查.创建实例时FileInfo,检查仅执行一次.但是,每次使用静态File方法时都会执行检查.

  • 我对DirectoryInfo.Exists和FileInfo.Exists有很多错误,因为它们不代表当前状态,只代表创建信息对象时的状态. (17认同)
  • @ larsen的评论非常宝贵.如果希望FileInfo对象反映"当前"状态,则需要显式调用FileInfo.Refresh. (5认同)
  • File.Exists的问题是它试图打开该文件.如果另一个线程试图同时访问该文件(当文件被打开时),我们只是说会有不幸的后果! (4认同)

mad*_*lor 6

"File和FileInfo类的方法类似,但它们的不同之处在于File类的方法是静态的,因此您需要传递比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

  • -1:**大多数**静态类/方法需要知道要对哪个对象进行操作; 而大多数实例方法自然会对指定的实例起作用.这不仅限于`File`和`FileInfo`. (4认同)

小智 5

File.Exists的执行速度比新的FileInfo(filePath).Exists要快得多 - 特别是在网络上并提供文件实际存在.这是因为File.Exists只检查文件是否存在,而新的FileInfo(filePath).Exists首先构造一个FileInfo对象,该对象包含文件的所有属性(日期,大小等)(如果存在).

根据我的经验,通过使用File.Exists,即使通过网络检查10个文件的存在也明显更快(即20ms vs 200ms).