【发布时间】:2011-10-14 20:19:04
【问题描述】:
使用File 对象的静态方法与创建一个新的FileInfo 对象并调用这些方法有很大区别吗?
【问题讨论】:
-
一个是静态的,一个是实例化的,一清二楚! :)
使用File 对象的静态方法与创建一个新的FileInfo 对象并调用这些方法有很大区别吗?
【问题讨论】:
唯一的区别是File必须解析指定的路径(假设是相对的),而FileInfo应该已经有解析的路径。
【讨论】:
File.Delete()调用Win32 Delete方法之前立即完成。而使用FileInfo,路径在创建时已经解析为绝对路径。这是对你所说的正确解释吗?换句话说,这是 CLR 在幕后所做的工作,可能会影响性能,因为 File.Delete() 经常使用相同的相对路径被调用。
Path.GetFullPathInternal 的调用,这会做一些工作来规范化/解析路径。正如@errorstacks 指出的那样,一个是静态方法,一个是实例。所以你不能在没有 FileInfo 实例的情况下调用 FileInfo.Delete。假设你有,那么唯一的区别就是路径分辨率。
两人都在打电话给Win32Native.DeleteFile()
【讨论】:
这取决于。如果您正在执行单个操作,请使用 File 类,如果您正在对同一文件执行多个操作,请使用 FileInfo。
编辑: 我提出这一点是因为我的理解是 File 类的静态方法将始终检查安全性。但是,如果您重新使用 FileInfo 的实例,这些方法将仅在第一次而不是在每个后续调用时进行安全检查。
【讨论】:
希望对你有帮助...
IO.FileInfo 提供创建、复制、删除、移动和打开文件的实例方法,并帮助创建System.IO.FileStream objects。这个类不能被继承。
也就是说,您需要创建 FileInfo 的实例/对象来完成这个过程。
IO.File 为文件的创建、复制、删除、移动和打开提供静态方法,并帮助创建 System.IO.FileStream 对象。
这意味着,您无需创建 FileInfo 的实例/对象来完成此过程。
查看论文链接了解更多信息
http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx
【讨论】:
不,它们基本上是一样的。
【讨论】:
不,为了方便,它们被复制了
【讨论】:
几乎没有区别。如果文件存在则删除文件,如果文件不存在则抛出异常。
【讨论】: