如何使用.NET获得以字节为单位的人类可读文件大小?
示例:输入输入7,326,629并显示6.98 MB
只是想知道.NET是否提供了一种干净的方法来执行此操作:
int64 x = 1000000;
string y = null;
if (x / 1024 == 0) {
y = x + " bytes";
}
else if (x / (1024 * 1024) == 0) {
y = string.Format("{0:n1} KB", x / 1024f);
}
Run Code Online (Sandbox Code Playgroud)
等等...
C#的"非信徒"问我扩展方法的目的是什么.我解释说,然后您可以向已定义的对象添加新方法,尤其是当您不拥有/控制原始对象的源时.
他提出"为什么不在自己的课堂上添加一种方法?" 我们一直在四处走动(以一种很好的方式).我的一般回答是,它是工具带中的另一个工具,他的回答是它是一种无用的工具浪费......但我认为我会得到一个更"开明"的答案.
有哪些场景你使用了你不能(或不应该)使用的方法添加到你自己的类上的扩展方法?
有没有办法使用String.Format将数字转换为数字/字符表示.
例如
2400 -> 2.4k
2,600,000 -> 2.6m
Run Code Online (Sandbox Code Playgroud) 我已经构建了一个递归函数来获取文件夹路径的目录大小.它的工作原理,但随着我必须搜索的目录数量不断增加(以及每个相应文件夹中的文件数量),这是一种非常缓慢,低效的方法.
static string GetDirectorySize(string parentDir)
{
long totalFileSize = 0;
string[] dirFiles = Directory.GetFiles(parentDir, "*.*",
System.IO.SearchOption.AllDirectories);
foreach (string fileName in dirFiles)
{
// Use FileInfo to get length of each file.
FileInfo info = new FileInfo(fileName);
totalFileSize = totalFileSize + info.Length;
}
return String.Format(new FileSizeFormatProvider(), "{0:fs}", totalFileSize);
}
Run Code Online (Sandbox Code Playgroud)
这是在所有子目录中搜索参数路径,因此dirFiles数组变得非常大.有没有更好的方法来实现这一目标?我已经四处寻找,但还没有找到任何东西.
我想到的另一个想法是将结果放入缓存中,当再次调用该函数时,尝试查找差异并仅重新搜索已更改的文件夹.不确定这是不是一件好事......
如何格式化C#中的数字,使12523.57变为"12K",2323542.32变为"2M"等?
我不知道如何附加正确的数字缩写(K,M等)并显示相应的数字?
所以,
1000 = 1K
2123.32 = 2K
30040 = 30k
2000000 = 2M
Run Code Online (Sandbox Code Playgroud)
在C#中是否有内置方式来执行此操作?