C# 以字节和MB为单位显示值

C# 以字节和MB为单位显示值,c#,visual-studio,C#,Visual Studio,我尝试在我的MessageBox中设置一个IF条件,如果freeSpaceInC/(1000000)1024以MB显示,则该值以字节为单位 我有下一个代码,但无法生成​​更简单?以及如何识别下一个ifif(dialogResult==dialogResult.Yes): static void Main() { var驱动=新驱动信息(“c”); long freeSpaceInC=drive.TotalFreeSpace; var drive1=新的DriveInfo(“d”); lo

我尝试在我的MessageBox中设置一个IF条件,如果
freeSpaceInC/(1000000)1024
以MB显示,则该值以字节为单位

我有下一个代码,但无法生成​​更简单?以及如何识别下一个if
if(dialogResult==dialogResult.Yes)

static void Main()
{    
var驱动=新驱动信息(“c”);
long freeSpaceInC=drive.TotalFreeSpace;
var drive1=新的DriveInfo(“d”);
long freeSpaceInD=drive.TotalFreeSpace;
如果((freeSpaceInC/(1000000)<1024)和&(freeSpaceInD/(1000000)<1024))
{
DialogResult DialogResult=MessageBox.Show(“C:中有“+freeSpaceInC/(1000000)+”B空闲,D:中有“+freeSpaceInD/(1000000)+”B空闲,是否继续安装?”,“MATLAB_R2008a_ENU_EU”,MessageBoxButtons.YesNo);
}
否则如果((freeSpaceInC/(1000000)>1024)和&(freeSpaceInD/(1000000)>1024))
{
DialogResult DialogResult=MessageBox.Show(“C:中有“+freeSpaceInC/(1000000)+”MB空闲空间,D:中有“+freeSpaceInD/(1000000)+”MB空闲空间,是否继续安装?”,“MATLAB_R2008a_ENU_EU”,MessageBoxButtons.YesNo);
}
否则如果((freeSpaceInC/(1000000)>1024)和&(freeSpaceInD/(1000000)<1024))
{
DialogResult DialogResult=MessageBox.Show(“C:中有“+freeSpaceInC/(1000000)+”MB可用空间,D:中有“+freeSpaceInD/(1000000)+”B可用空间:。是否继续安装?”,“MATLAB_R2008a_ENU_EU”,MessageBoxButtons.YesNo);
}
否则如果((freeSpaceInC/(1000000)<1024)和&(freeSpaceInD/(1000000)>1024))
{
DialogResult DialogResult=MessageBox.Show(“C:中有“+freeSpaceInC/(1000000)+”B可用,“+freeSpaceInD/(1000000)+”D:中有“+freeSpaceInD/(MB可用:。是否继续安装?”,“MATLAB_R2008a_ENU_EU”,MessageBoxButtons.YesNo);
}
如果(dialogResult==dialogResult.Yes)
{
Form1 fm1=新Form1();
fm1.ShowDialog();
fm1.Close();
}            
else if(dialogResult==dialogResult.No)
{
Application.Exit();
}
}

您可以做得更简单:

static void Main()
{    
    DialogResult dialogResult = MessageBox.Show("There is " + toReadableSize(freeSpaceInC) + " free in C: and " + toReadableSize(freeSpaceInD) + " free in D:. Do you want to continue the installation?", "MATLAB_R2008a_ENU_EU", MessageBoxButtons.YesNo);

    if (dialogResult == DialogResult.Yes)
    {
        Form1 fm1 = new Form1();
        fm1.ShowDialog();
        fm1.Close();
    }            
    else if (dialogResult == DialogResult.No)
    {
        Application.Exit();
    }
}

private static string toReadableSize(int size)
{
    if(size < 1024)
        return size + "B";

    if(size < 1024*1024)
        return Math.Round(((float)size / 1024), 2) + "KB";

    if(size < 1024*1024*1024)
        return Math.Round(((float)size / (1024*1024)), 2) + "MB";

    return Math.Round(((float)size / (1024*1024*1024)), 2) + "GB";
}
static void Main()
{    
DialogResult DialogResult=MessageBox.Show(“C:中有“+toReadableSize(freeSpaceInC)+”free:和“+toReadableSize(freeSpaceInD)+”free:中有“+toReadableSize(freeSpaceInD):”是否继续安装?”,“MATLAB_R2008a_ENU_EU”,MessageBoxButtons.YesNo);
如果(dialogResult==dialogResult.Yes)
{
Form1 fm1=新Form1();
fm1.ShowDialog();
fm1.Close();
}            
else if(dialogResult==dialogResult.No)
{
Application.Exit();
}
}
私有静态字符串toReadableSize(整型大小)
{
如果(大小<1024)
返回大小+“B”;
如果(大小<1024*1024)
返回数学圆((浮点)大小/1024),2)+“KB”;
如果(大小<1024*1024*1024)
返回数学圆((浮点)大小/(1024*1024)),2)+“MB”;
返回数学圆((浮点)大小/(1024*1024*1024)),2)+“GB”;
}

您可以做得更简单:

static void Main()
{    
    DialogResult dialogResult = MessageBox.Show("There is " + toReadableSize(freeSpaceInC) + " free in C: and " + toReadableSize(freeSpaceInD) + " free in D:. Do you want to continue the installation?", "MATLAB_R2008a_ENU_EU", MessageBoxButtons.YesNo);

    if (dialogResult == DialogResult.Yes)
    {
        Form1 fm1 = new Form1();
        fm1.ShowDialog();
        fm1.Close();
    }            
    else if (dialogResult == DialogResult.No)
    {
        Application.Exit();
    }
}

private static string toReadableSize(int size)
{
    if(size < 1024)
        return size + "B";

    if(size < 1024*1024)
        return Math.Round(((float)size / 1024), 2) + "KB";

    if(size < 1024*1024*1024)
        return Math.Round(((float)size / (1024*1024)), 2) + "MB";

    return Math.Round(((float)size / (1024*1024*1024)), 2) + "GB";
}
static void Main()
{    
DialogResult DialogResult=MessageBox.Show(“C:中有“+toReadableSize(freeSpaceInC)+”free:和“+toReadableSize(freeSpaceInD)+”free:中有“+toReadableSize(freeSpaceInD):”是否继续安装?”,“MATLAB_R2008a_ENU_EU”,MessageBoxButtons.YesNo);
如果(dialogResult==dialogResult.Yes)
{
Form1 fm1=新Form1();
fm1.ShowDialog();
fm1.Close();
}            
else if(dialogResult==dialogResult.No)
{
Application.Exit();
}
}
私有静态字符串toReadableSize(整型大小)
{
如果(大小<1024)
返回大小+“B”;
如果(大小<1024*1024)
返回数学圆((浮点)大小/1024),2)+“KB”;
如果(大小<1024*1024*1024)
返回数学圆((浮点)大小/(1024*1024)),2)+“MB”;
返回数学圆((浮点)大小/(1024*1024*1024)),2)+“GB”;
}

或者您可以使用类似于以下内容的通用解决方案:

string TranslateSize(long value) {
    var table =
        Enumerable
        .Range(0, 5)
        .Select(x => {
            var @base = (long)Math.Pow(1024, x);
            return new {
                Start = x != 0 ? @base : 0,
                End = 1024 * @base,
                Divider = @base,
                Suffix = ""
            };})
        .Zip(
            new []{"B", "kB", "MB", "GB", "TB"},
            (l, r) => new {
                l.Start,
                l.End,
                l.Divider,
                Suffix = r
            });

    var result = table.Single(x => x.Start <= value && value < x.End);
    return result;
}
string TranslateSize(长值){
变量表=
可枚举
.范围(0,5)
.选择(x=>{
var@base=(long)Math.Pow(1024,x);
还新{
起点=x!=0?@base:0,
结束=1024*@基,
除法器=@base,
后缀=“”
};})
Zip先生(
新[]{“B”、“kB”、“MB”、“GB”、“TB”},
(l,r)=>新{
l、 开始,
l、 完,,
l、 分隔器,
后缀=r
});

var result=table.Single(x=>x.Start或者您可以使用类似于以下内容的通用解决方案:

string TranslateSize(long value) {
    var table =
        Enumerable
        .Range(0, 5)
        .Select(x => {
            var @base = (long)Math.Pow(1024, x);
            return new {
                Start = x != 0 ? @base : 0,
                End = 1024 * @base,
                Divider = @base,
                Suffix = ""
            };})
        .Zip(
            new []{"B", "kB", "MB", "GB", "TB"},
            (l, r) => new {
                l.Start,
                l.End,
                l.Divider,
                Suffix = r
            });

    var result = table.Single(x => x.Start <= value && value < x.End);
    return result;
}
string TranslateSize(长值){
变量表=
可枚举
.范围(0,5)
.选择(x=>{
var@base=(long)Math.Pow(1024,x);
还新{
起点=x!=0?@base:0,
结束=1024*@基,
除法器=@base,
后缀=“”
};})
Zip先生(
新[]{“B”、“kB”、“MB”、“GB”、“TB”},
(l,r)=>新{
l、 开始,
l、 完,,
l、 分隔器,
后缀=r
});

var result=table.Single(x=>x.Start)您能提供一些关于您的情况的更多信息吗?您想检查什么?freeSpaceInC给我C:\drive的可用空间,数字>1024,然后在消息框中显示“number”MB,如果数字是,那是什么?/(1000000)我只是觉得你做错了什么。你必须在条件之外声明
dialogResult
。如果你想,你可以忽略/1000000,数字是以字节为单位的,如果不是,结果是以MB为单位的。你能提供一些关于你的条件的更多信息吗?你想检查什么?freeSpaceInC给我C:\drive,a的可用空间nd数字大于1024,然后在MessageBox中设置为