File和FileInfo在C#中有什么区别?
我一直在阅读, 文件类的静态方法是更好地用来执行一个文件,如检查,看看它是否存在,如果我们要执行多个文件信息类的实例对特定文件的操作。
我明白这一点,可以简单地用这种方式盲目,但我想知道为什么有差异? 他们的工作方式是什么,使他们适合不同的情况? 让这两个不同的课程在不同的方面看起来有什么相同之处?
如果有人能够回答这个问题中的至less一个,那将是有帮助的。
通常,如果您正在对文件执行单个操作,请使用File
类。 如果您在同一个文件上执行多个操作,请使用FileInfo
。
这样做的原因是因为访问文件时进行的安全检查。 当您创buildFileInfo
的实例时,该检查仅执行一次。 但是,每次使用静态File
方法时都会执行检查。
“File和FileInfo类的方法是相似的,但是它们的不同之处在于File类的方法是静态的 ,所以您需要传递比FileInfo实例的方法更多的参数,因为您需要这样做,因为它对特定文件进行操作;例如,FileInfo.CopyTo()方法为用于复制文件的目标path提供一个参数,而File.Copy()方法则为源path和目标path提供两个参数“。
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
File.Exists的执行速度比新的FileInfo(filePath)要快得多.Exists – 特别是在networking上,并提供文件实际存在。 这是因为File.Exists只会检查文件的存在,而新的FileInfo(filePath).Exists首先构造一个FileInfo对象,该对象包含文件的所有属性(date,大小等)(如果存在)。
根据我的经验,即使使用File.Exists检查networking上是否存在10个文件,也会明显更快(即20ms vs 200ms)。
文件针对文件上的一次性操作进行了优化,FileInfo针对同一个文件上的多个操作进行了优化,但通常情况下,不同的方法实现之间没有太大的区别。
如果你想比较确切的实现,使用reflection器看看这两个类。
FileInfo可能需要处理访问控制属性。 其余的是静态与实例的select,你可以select方便。
是的,其中一个原因可能是,正如Nag说的,Files是一个实用程序类,因此不需要创build任何实例。 同时,由于文件是实用程序类,每次都需要安全检查。
另一方面,FileInfo需要创build实例,并指出它使用安全检查。 因此,现在使用FileInfo执行多个操作不会调用安全检查。
FileInfo是文件的一个实例,因此代表文件本身。 文件是一个工具类,所以可以使用任何文件
最近我遇到了File.Exist
问题,我讨厌这个函数。 比我使用Fileinfo
类Exist
函数后,我的程序工作正确。
实际上,在开发环境中发生的事情, File.Exist
工作的很好,但是当它进入到实际环境时,这个函数阻塞了文件对象,因为这个原因,我得到的错误访问被拒绝,无法使用该文件。
这是我的学习。 我永远不会使用File.Exist
方法最好是创build对象,然后使用它。 请注意使用静态方法。