それで、私はあなたにすべてが何であるかについての要約を与えましょう:
最初のセクションは、ドライブのサイズ情報を取得するだけです
Sizerは、配列を返すクラスです。
配列には(4桁に変換されたサイズ、サイズラベル、生のサイズ)が含まれています理解を深めるために下部にコードを貼り付けました
ラベルはサイズを表示する単なるラベルです
今、私はこれを行うためのより効率的な方法があることを深く知っています、そして私は脳のおならを持っていてそれを理解することができません。ループでこれを行う方法が必要ですか、それともこれを行うための本当に最良の方法ですか?
private void driveList_SelectedIndexChanged(object sender, EventArgs e)
{
DriveInfo wow = therehasgottobeanotherway[driveList.SelectedIndex];
if (wow.IsReady)
{
//get drive sizes
long tot = wow.TotalSize;
long free = wow.TotalFreeSpace;
long aval = wow.AvailableFreeSpace;
sizer totSize = new sizer(tot);
sizer freeSize = new sizer(free);
sizer avalSize = new sizer(aval);
String[] tots = totSize.getSizeStringType();
String[] frees = freeSize.getSizeStringType();
String[] avals = avalSize.getSizeStringType();
totalSizeLabel.Text = tots[0] + tots[1];
freeSizeLabel.Text = frees[0] + frees[1];
avalSizeLabel.Text = avals[0] + avals[1];
driveName.Text = wow.VolumeLabel;
}
else
{
driveName.Text = "Drive Not Ready";
}
}
using System;
namespace compy
{
internal class sizer
{
private long fSize;
private String[] fSizer = new String[3];
public sizer(long fs)
{ fSize = fs; }
public String[] getSizeStringType()
{
fSizer[2] = Convert.ToString(fSize);
if (fSize > 0 && fSize < 1024)
{
fSizer[0] = Convert.ToString(fSize);
fSizer[1] = " Bytes";
}
else if (fSize > 1024 && fSize < 1048576)
{
fSizer[0] = Convert.ToString(fSize / 1000);
fSizer[1] = " Kilobytes";
}
else if (fSize > 1048576 && fSize < 1073741824)
{
fSizer[0] = Convert.ToString(fSize / 1000 / 1000);
fSizer[1] = " Megabytes";
}
else if (fSize > 1073741824 && fSize < 1099511627776)
{
fSizer[0] = Convert.ToString(fSize / 1000 / 1000 / 1000);
fSizer[1] = " Gigabytes";
}
else if (fSize > 1099511627776 && fSize < 1.1259e15)
{
fSizer[0] = Convert.ToString(fSize / 1000 / 1000 / 1000);
fSizer[1] = " Terabyte";
}
return fSizer;
}
}
}