0

バイトをギガバイトに変換する際に問題が発生しました。このコードスニペットがあります。

        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";
    }

これは、コンソールアプリにサイズを印刷するときに完全に正常に機能します。しかし、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);

        }

ヘルプ/フィードバックをいただければ幸いです:)

4

1 に答える 1

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であり、数値ではないことが必要になることに注意してください。

于 2012-08-07T10:40:22.220 に答える