C# 扩展文件类

C# 扩展文件类,c#,class,extend,C#,Class,Extend,是否可以扩展文件类?我想向File类添加新的GetFileSize方法,并像这样使用它 string s = File.GetFileSize("c:\MyFile.txt"); 实施 public static string GetFileSize(string fileName) { FileInfo fi = new FileInfo(fileName); long Bytes = fi.Length; if (Bytes >= 1073741824)

是否可以扩展文件类?我想向File类添加新的GetFileSize方法,并像这样使用它

string s = File.GetFileSize("c:\MyFile.txt");
实施

public static string GetFileSize(string fileName)
{

    FileInfo fi = new FileInfo(fileName);
    long Bytes = fi.Length;

    if (Bytes >= 1073741824)
    {
        Decimal size = Decimal.Divide(Bytes, 1073741824);
        return String.Format("{0:##.##} GB", size);
    }
    else if (Bytes >= 1048576)
    {
        Decimal size = Decimal.Divide(Bytes, 1048576);
        return String.Format("{0:##.##} MB", size);
    }
    else if (Bytes >= 1024)
    {
        Decimal size = Decimal.Divide(Bytes, 1024);
        return String.Format("{0:##.##} KB", size);
    }
    else if (Bytes > 0 & Bytes < 1024)
    {
        Decimal size = Bytes;
        return String.Format("{0:##.##} Bytes", size);
    }
    else
    {
        return "0 Bytes";
    }
}
public静态字符串GetFileSize(字符串文件名)
{
FileInfo fi=新的FileInfo(文件名);
长字节=fi.Length;
如果(字节>=1073741824)
{
十进制大小=十进制除法(字节,1073741824);
返回String.Format(“{0:###.##}GB”,大小);
}
否则如果(字节>=1048576)
{
十进制大小=十进制除法(字节,1048576);
返回String.Format(“{0:###.##}MB”,大小);
}
else if(字节>=1024)
{
十进制大小=十进制除法(字节,1024);
返回String.Format(“{0:###.##}KB”,大小);
}
else if(字节>0&字节<1024)
{
十进制大小=字节;
返回String.Format(“{0:###.##}字节”,大小);
}
其他的
{
返回“0字节”;
}
}

我曾尝试使用扩展方法将该方法添加到文件类中,但编译器给出错误“'System.IO.File”:静态类型不能用作参数“

不,您不能这样做。只需创建自己的静态类并将该方法添加到其中。

否,但您可以创建自己的静态类并将方法放在其中。考虑到您基本上是在为用户界面生成摘要字符串,我认为它无论如何都不会属于File类(即使您可以将其放在那里,但您不能)。

看起来您必须将其作为自己的文件助手来实现

如果你想的话,你可以把它作为FileInfo的一个扩展方法,但是你必须做一些类似的事情


新建文件信息(“某些路径”).GetFileSize()

文件
是一个
静态
类,无法扩展。改用类似于
FileEx
的方法

string s = FileEx.GetFileSize("something.txt");

您可以实现一个具有这种方法的新静态类,也可以扩展一个像
FileStream

这样的非静态类,这不是更简单吗

System.IO.FileInfo f1 = new System.IO.FileInfo("c:\\myfile.txt").Length 
或者可以扩展FileInfo类

public static string GetFileSize(this FileInfo fi)
{

  long Bytes = fi.Length;

  if (Bytes >= 1073741824)
  {
     Decimal size = Decimal.Divide(Bytes, 1073741824);
     return String.Format("{0:##.##} GB", size);
  }
  else if (Bytes >= 1048576)
  {
     Decimal size = Decimal.Divide(Bytes, 1048576);
     return String.Format("{0:##.##} MB", size);
  }
  else if (Bytes >= 1024)
  {
     Decimal size = Decimal.Divide(Bytes, 1024);
     return String.Format("{0:##.##} KB", size);
  }
  else if (Bytes > 0 & Bytes < 1024)
  {
     Decimal size = Bytes;
     return String.Format("{0:##.##} Bytes", size);
  }
  else
  {
     return "0 Bytes";
  }
 }
 System.IO.FileInfo f1 = new System.IO.FileInfo("c:\\myfile.txt");
 var size = f1.GetFileSize();