C# 文件类中 File ,FileInfo 类的主要区别

System.IO命名空间中提供的文件操作类有File和FileInfo,这两个类的功能基本相同,只是File是静态类,其中所有方法都是静态的,可以通过类名直接调用,不需要实例化。而FileInfo是普通类,只有实例化对象后才可以调用其中的方法。

File类是一个静态类,它对应整个文件系统进行操作,方法均为静态文法;如果只是对文件进行少量的操作,如判断文件是否存在之类或者对很多的文件进行操作,建议使用File类,可以避免频繁创建和释放对象的系统开销。

FileInfo类是一个实例类,它对应某一个文件进行操作,方法大部分为实例方法,它的操作有可能是调用的File中的对应静态方法。如果是对一个文件进行大量的操作,建议使用FileInfo类。

那么为什么有时还使用FileInfo呢?因为每次通过File类调用某个方法时,都要占用一定的cpu处理时间来进行安全检查,即使使用不同的File类的方法重复访问同一个文件时也是如此。而FileInfo类只在创建FileInfo对象时执行一次安全检查。

为方便操作,有很多时候不需要生成一个FileInfo对象那么麻烦。比如:复制一个文件到另外一个地方:File.Copy(filePath,newFilePath)就可以。如果用FileInfo可能需要:FileInof fi = new FileInfo();fi.CopyTo(newFilePath);

我们可以使用以下规则确定:

1、如果应用程序在文件上执行几种操作,则使用FileInfo类更好一些,因为创建对象时,已经引用了正确的文件,而静态类每次都要寻找文件,会花费更多时间。

2、如果进行单一的方法调用,则建议用File类,不必实例化对象。
时间: 2024-08-02 13:40:15

C# 文件类中 File ,FileInfo 类的主要区别的相关文章

C# 类中隐藏基类方法和Partial

原文:C# 类中隐藏基类方法和Partial 今天对于.NET开发人员来说最开心的事情莫过于微软搞开源了,这觉得是给搞.NET开发的长脸.虽然我是一个初学者,这无疑给我极大的学习动力.Fighting!!! 当一个类从父类继承了一个成员时,也就继承了它的执行代码,如果成员时虚拟的,我们可以用override重写这段执行代码.但无论他是否是虚拟的,都可以通过new 关键字来隐藏它.例如: public class BaseClass { public void DoSomething() { //

C#派生类中使用基类protected成员的方法

我们知道C#中通过继承可以使一个具有公共数据和方法的基类被广泛应用从而减少代码量,这样派生类会具有基类中所有成员(除构造器等),我们理所当然可以通过派生类实例来使用基类的成员.那么当基类成员被protected修饰时,我们应该怎么在派生类中使用基类成员呢,下面将介绍使用方法. 首先我们贴一段错误的使用代码: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.ReadLine(); 6 7 } 8 } 9 pub

关于“在本类中访问本类私有静态变量”的一点疑惑解析

关于"在本类中访问本类私有静态变量"的一点疑惑解析 代码如下: public class StaticVar { private static int x = 100; public static void main(String[] args) { StaticVar var1 = new StaticVar(); var1.x++; StaticVar var2 = new StaticVar(); var2.x++; StaticVar.x++; System.out.print

【C++】通过基类的指针变量访问派生类中由基类继承来的隐藏对象

//<img src="http://img.blog.csdn.net/20150512213309005?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG91ZG91d2ExMjM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /> // 可以将一个派生类的对象的地址赋给其基类的指针变量,但

在派生类中引发基类事件

1.  在创建基类时,若涉及到事件,事件是特殊类型的委托,只可以从声明它们的类中调用,派生类无法直接调用基类中声明的事件,但是在多数情况,会需要允许派生类调用基类事件,这时,可以再包含该事件的基类中创建一个受保护的虚调用方法,通过调用或重写此调用方法,派生类便可以间接调用该事件. 注:不要在基类中声明虚拟事件,也不要在派生类中重写这些事件,C#编译器无法正确处理这些事件,并且无法预知该派生的事件的用户是否真正订阅了基类事件. 和下面的程序示例都来自:https://msdn.microsoft.

065、Java面向对象之定义一个Book类,在主类中使用Book类

01.代码如下: package TIANPAN; class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 public void getInfo() { // 此方法将由对象调用 System.out.println("图书名称:" + title + ",价格:" + price); } } /** * 此处为文档注释 * * @author 田攀 微信382477247 */ pu

首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能。

1.Account类 package lianxi; public class Account { String zhanghao; Double cunkuanyu_e; Account (String hao,Double a) { zhanghao=hao; cunkuanyu_e=a; } void cunkuan(Double cunqian) { cunkuanyu_e+=cunqian; System.out.println("存钱"+cunqian+"元后存款

编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能。

package com.homework.zw; import java.util.Scanner; public class YinHang { long zhanghao; double yue; double ck; double qk; YinHang(long zh,double ye) { zhanghao=zh; yue=ye; } void getcunkuan() { Scanner sc1=new Scanner(System.in); System.out.println(

C#文件操作基础之File类和FileInfo类

文件和I/O流的差异: 文件是一些具有永久存储及特定顺序的字节组成的一个有序的.具有名称的集合. 因此对于文件,我们常常想到目录路径,磁盘存储,文件和目录名等方面. I/O流提供一种后备存储写入字节和从后备存储读取字节的方式. 后备存储可以为多种存储媒介之一. System.IO命名空间中的常用类: BinaryReader     用特定的编码将基元数据类型读作二进制值 BinaryWriter     以二进制形式将基元类型写入流,并支持用特定的编码写入字符串 Directory