我在将字节转换为千兆字节方面遇到了一些问题, 我有这段代码,
public static string FormatBytes(long bytes)
{
const int scale = 1024;
string[] orders = new string[] { "GB", "MB", "KB", "Bytes" };
long max = (long)Math.Pow(scale, orders.Length - 1);
foreach (string order in orders)
{
if (bytes > max)
{
return string.Format("{0:##.##} {1}", Decimal.Divide(bytes, max), order);
}
max /= scale;
}
return "0 Bytes";
}
在将尺寸打印到Console App时效果非常好。 但 我不知道如何将它实现到我的代码的这个(下面)部分,以便在将文件大小插入我的SQL表时将其转换。
List<DriveInfo> driveList = DriveInfo.GetDrives().Where(x=>x.IsReady).ToList<DriveInfo>();
//Insert information of one server - You will need get information of all servers
server.ServerID = 0; //Here is necessery put PK key. I recommend doing the SQL server will automatically generate the PK.
server.ServerName = string.Concat("Server ", driveList.Count);
//Inserts information in the newServers object
for (int i = 0; i < driveList.Count; i++)
{
ServerDrive serverDrives = new ServerDrive();
//Put here all the information to obeject Server
serverDrives.DriveLetter = driveList[i].Name;
serverDrives.TotalSpace = driveList[i].TotalSize;
serverDrives.DriveLabel = driveList[i].VolumeLabel;
serverDrives.FreeSpace = driveList[i].TotalFreeSpace;
serverDrives.DriveType = driveList[i].DriveFormat;
// server.ListServerDrives.Add(serverDrives);
server.ServerDrives.Add(serverDrives);
}
非常感谢任何帮助/反馈:)
答案 0 :(得分:3)
不要将这种格式化放入数据库中。如果您只存储字节数,然后在将其呈现给用户时格式化它会好得多。您将遇到的第一个问题是在可用空间上进行排序(例如),然后您可能会得到一个这样的列表。
Drive Free Space
C 12 GB
E 13 Bytes
D 16 MB
因此,最好将实际金额存储在那里,以便您可以正确处理数据。无论如何,如果你坚持并希望存储它,那么你只需像这样添加它。
serverDrives.DriveLetter = driveList[i].Name;
serverDrives.TotalSpace = FormatBytes(driveList[i].TotalSize);
serverDrives.DriveLabel = driveList[i].VolumeLabel;
serverDrives.FreeSpace = FormatBytes(driveList[i].TotalFreeSpace);
serverDrives.DriveType = driveList[i].DriveFormat;
请记住,这将要求您的TotalSpace和FreeSpace列是数据库中的字符串/ varchar,而不是数字。