Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定进度条中的大小是KB、MB、GB、TB?_C#_Progress Bar - Fatal编程技术网

C# 如何确定进度条中的大小是KB、MB、GB、TB?

C# 如何确定进度条中的大小是KB、MB、GB、TB?,c#,progress-bar,C#,Progress Bar,我试图在进度条中显示硬盘空间的大小。我已经在进度条中显示了大小,但我不知道如何显示与显示的大小相对应的大小是否为“MB、KB、GB、TB”,等等 到目前为止,这是我得到的密码 private void Form1_Load(object sender, EventArgs e) { foreach (DriveInfo dir in DriveInfo.GetDrives()) cmbDrive.Items.Add(dir.ToString

我试图在进度条中显示硬盘空间的大小。我已经在进度条中显示了大小,但我不知道如何显示与显示的大小相对应的大小是否为“MB、KB、GB、TB”,等等

到目前为止,这是我得到的密码

    private void Form1_Load(object sender, EventArgs e)
    {
        foreach (DriveInfo dir in DriveInfo.GetDrives())
            cmbDrive.Items.Add(dir.ToString());
    }

    private void cmbDrive_SelectedIndexChanged(object sender, EventArgs e)
    {
        DriveInfo Drive_Info = new System.IO.DriveInfo(cmbDrive.Text);

        const int byteConversion = 1024;
        double bytes = Convert.ToDouble(Drive_Info.TotalSize);
        double tSpace = Drive_Info.TotalSize;
        double uSpace;
        uSpace = Drive_Info.TotalSize - Drive_Info.TotalFreeSpace;
        uSpace = Math.Round((uSpace / 1024f) / 1024f / 1024f);
        tSpace = Math.Round((tSpace / 1024f) / 1024f / 1024f);
        double space = Drive_Info.TotalSize;
        double fSpace = Drive_Info.TotalFreeSpace;
        prgSpace.Minimum = 0;
        prgSpace.Maximum = 100;
        prgSpace.Value = (int)Math.Round(100d / tSpace * uSpace);
        prgSpace.CreateGraphics().DrawString(uSpace.ToString() + " Free" + " of " + tSpace.ToString() + " ", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(prgSpace.Width / 2 - 10, prgSpace.Height / 2 - 7));

在类中的某个位置添加此函数。()

然后,使用下面定义的
uSpaceStr
tSpaceStr
代替打印双值

    long tSpace = Drive_Info.TotalSize;
    long uSpace = Drive_Info.TotalSize - Drive_Info.TotalFreeSpace;
    string uSpaceStr = BytesToString(uSpace);
    string tSpaceStr = BytesToString(tSpace);
    prgSpace.CreateGraphics().DrawString(uSpaceStr + " Free" + " of " + tSpaceStr + " ", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(prgSpace.Width / 2 - 10, prgSpace.Height / 2 - 7));

@除此之外,这不是我想要的,你可以用它来完成这项任务。它在nuget上可用。BytesToString(uSpace)和BytesToString(tSpace)给了我一个参数:“无法从双精度转换为长精度”@user3904439删除您当前对tSpace和uSpace的定义,我更新了我的代码,使其使用
long
而不是
double
谢谢!现在可以了!剩下的就是试图找出如何将文本居中,我将对此进行一些研究。
    long tSpace = Drive_Info.TotalSize;
    long uSpace = Drive_Info.TotalSize - Drive_Info.TotalFreeSpace;
    string uSpaceStr = BytesToString(uSpace);
    string tSpaceStr = BytesToString(tSpace);
    prgSpace.CreateGraphics().DrawString(uSpaceStr + " Free" + " of " + tSpaceStr + " ", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(prgSpace.Width / 2 - 10, prgSpace.Height / 2 - 7));