是否可以扩展文件类?我想将新的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':静态类型不能用作参数”
答案 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)
File
是static
类,无法扩展。请改用FileEx
之类的内容。
string s = FileEx.GetFileSize("something.txt");
答案 3 :(得分:0)
不,你不能这样做。只需创建自己的静态类并将该方法添加到其中。
答案 4 :(得分:0)
看起来你必须将它作为你自己的文件助手来实现。
如果你愿意,你可以把它变成FileInfo的扩展方法,但是你必须做类似的事情。
new FileInfo(“some path”)。GetFileSize();
答案 5 :(得分:0)
您可以实现一个具有此类方法的新静态类,也可以实现像FileStream
这样的非静态类。