扩展文件类

时间:2011-03-15 12:53:49

标签: c# class extend

是否可以扩展文件类?我想将新的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";
    }
}

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

6 个答案:

答案 0 :(得分:4)

不,但您可以创建自己的静态类并将方法放在那里。鉴于你基本上是为你的用户界面生成一个摘要字符串,我不认为它会属于File类(即使你可以把它放在那里 - 你不能)。

答案 1 :(得分:4)

这不会更简单吗

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();

答案 2 :(得分:3)

Filestatic类,无法扩展。请改用FileEx之类的内容。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

看起来你必须将它作为你自己的文件助手来实现。

如果你愿意,你可以把它变成FileInfo的扩展方法,但是你必须做类似的事情。

new FileInfo(“some path”)。GetFileSize();

答案 5 :(得分:0)

您可以实现一个具有此类方法的新静态类,也可以实现像FileStream这样的非静态类。