Как преобразовать размер базы данных из мегабайтов в байты или наоборот?

По сути, я создаю приложение для репликации, и мне просто нужно выяснить размер базы данных и сколько свободного места у меня есть на диске D:\.

Если размер базы данных больше, чем свободное пространство, то мне нужно предупредить пользователя.

Это то, что я до сих пор:

Сначала я узнаю, сколько свободного места на диске D.

DriveInfo di = new DriveInfo(@"D:\");

if (di.IsReady)
{
    freeSpace = di.TotalFreeSpace;
}

Затем я получаю размер базы данных, которую собираюсь скопировать:

dbSize = Database.GetDatabaseSize(ddlPublisherServer.Text, ddlPublisherDatabase.Text);

Вот метод, который получает размер БД. Я не знаю, есть ли лучший способ сделать это, но размер идет со строкой "МБ", поэтому мне нужно удалить ее.

public static long GetDatabaseSize(string server, string database)
{
     string finalConnString = Properties.Settings.Default.rawConnectionString.Replace("<<DATA_SOURCE>>", server).Replace("<<INITIAL_CATALOG>>", database);

      using (SqlConnection conn = new SqlConnection(finalConnString))
      {
          using (SqlCommand cmd = new SqlCommand("sp_spaceused", conn))
          {
              cmd.CommandType = CommandType.StoredProcedure;

              conn.Open();
              cmd.ExecuteNonQuery();

              using (SqlDataAdapter da = new SqlDataAdapter(cmd))
              {
                  using (DataSet ds = new DataSet())
                  {
                      da.Fill(ds);

                      var spaceAvailable = ds.Tables[0].Rows[0][1].ToString();

                      string freeSpace = spaceAvailable.Remove(spaceAvailable.Length - 3, 3);

                      return Convert.ToInt64(freeSpace);
                   }
              }
         }
     }
}

Мой вопрос сейчас -

Как мне преобразовать байты в мегабайты, чтобы я мог сравнить размер БД и свободное место на диске?

Это то, что у меня есть, но это мегабайты и байты, поэтому мне нужно сделать преобразование здесь.

if (dbSize > freeSpace)
{
     ClientScript.RegisterStartupScript(this.GetType(), "Insufficient Space", "alert('The database size is greater than the available space on the drive. Please make some room for the database in D drive of the subscriber server.');", true);
 }

2 ответа

Решение

Байт в мегабайты = Bytes / (1024 * 1024)
Мегабайты в байты = Megabytes * (1024 * 1024.0)

Обязательно учитывайте целочисленное деление, поэтому 1024.0 поэтому используется число с плавающей запятой.

В килобайтах содержится 1024 байта, а в мегабайте - 1024 килобайта. Так что умножьте свои мегабайты на 1024 * 1024 (чтобы получить байты). Или же разделите ваши байты на 1024 * 1024 (чтобы получить мегабайты).

Другие вопросы по тегам