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

时间:2009-08-24 21:06:59

标签: c# file

我一直在阅读文件类的静态方法更好地用于在文件上执行少量和少量任务,例如检查它是否存在以及我们应该使用的实例如果我们要对特定文件执行许多操作,则 FileInfo 类。

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

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

10 个答案:

答案 0 :(得分:79)

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

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

答案 1 :(得分:6)

“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

答案 2 :(得分:5)

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

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

答案 3 :(得分:3)

文件针对文件的一次性操作进行了优化,FileInfo针对同一文件的多个操作进行了优化,但通常不同方法实现之间没有太大区别。

如果要比较确切的实现,请使用Reflector查看这两个类。

答案 4 :(得分:3)

可能需要FileInfo来处理访问控制属性。其余的是静态与实例选择,你可以选择方便的东西。

答案 5 :(得分:2)

是的,其中一个原因可能是,因为Nag说文件是一个实用程序类,因此不需要创建实例。同时,由于File是实用程序类,每次都需要进行安全检查。

另一方面,FileInfo需要创建实例,并且它使用安全检查。因此,现在使用FileInfo执行多个操作不会调用安全检查。

答案 6 :(得分:1)

FileInfo是文件的实例,因此表示文件本身。文件是一个实用程序类,因此可以使用任何文件

答案 7 :(得分:1)

最近我遇到File.Exist的问题,我讨厌这个功能。在我使用FileinfoExist函数之后,我的程序工作正常。

实际上在开发环境File.Exist中发生的事情很有效,但是当它进入实时环境时,由于这个原因我阻止了文件对象,因为我得到了错误访问被拒绝而无法使用该文件。

这是我的学习。 我永远不会使用File.Exist方法最好是创建对象然后使用它。请注意使用静态方法。

答案 8 :(得分:0)

的FileInfo:

  • 使用前需要实例化
  • 包含实例方法
  • 缓存有关文件的信息,您需要每次都调用刷新以获取有关文件的最新信息

文件:

  • 无需实例化
  • 包含静态方法
  • 不要缓存,因此每次使用时都会获得最新信息。

的src:

答案 9 :(得分:0)

from tkinter import * from tkinter import ttk from tkinter import filedialog # initialize gui interface root=Tk() root.geometry("510x200") global folder_selected, path def getFolderPath(): # do somthing btnFind = ttk.Button(root, text="Browse Folder",command=getFolderPath) def down(): #do somthing dwn=ttk.Button(root,text="Download",width='25',command=down) dwn.place(x=190,y=120) root.mainloop() 类和File类之间的主要区别是

  

FileInfoFile类的两个成员都装饰有FileInfo属性,但是[System.Security.SecurityCritical] and [System.Security.SecuritySafeCritical]类具有“多个安全检查” 作为与File(Read Here)相比,每次调用FileInfo类的静态成员时都会执行检查。

     

创建File的实例时,检查仅执行一次。

  • 除这些以外,其他较小的区别是FileInfo是静态类型类,而File是实例类型类。
  • 因此,要访问FileInfo类的成员,您需要创建一个实例,而在FileInfo类中,您可以直接访问其成员而无需创建实例。
  • 如果您要在同一个文件上执行多项操作,则使用File实例方法而不是FileInfo类的相应静态方法会更有效。
  • 但是,与File类相比,File类提供了更多的方法。

FileInfo