拔插磁盤相關(C#)

using System.Runtime.InteropServices;

   

    /// <summary>
    /// 界面相關基礎處理,獲取插入或拔出的移動磁盤以及對應磁盤的卷標,剩餘空間大小,磁盤是否爲數據卡
    /// </summary>
    public class BaseClass
    {
        /// <summary>
        /// 插入或拔出前磁盤列表
        /// </summary>
        private static List<string> strDrivers = new List<string>();


        public BaseClass( )
        {
            string[] temp = Environment.GetLogicalDrives();
            for (int i = 0; i < temp.Length; i++)
                if (!strDrivers.Contains(temp[i]))
                      strDrivers.Add(temp[i]);
        }


        #region 得到變化盤符
        /// <summary>
        /// 得到變化的磁盤盤符
        /// </summary>
        /// <returns></returns>
        public string drivers()
        {
            List<String> temps = new List<string>();
            String[] strDriver0 = Environment.GetLogicalDrives();//當前所有盤符
            string pan = "";
            if (strDrivers.Count > strDriver0.Length)//磁盤數減少了表示有拔出
            {
                foreach (string i in strDrivers)
                {
                    bool E2 = false;
                    if (null != i)
                        for (int j = 0; j < strDriver0.Length; j++)
                        {
                            if (i == strDriver0[j])
                            {
                                E2 = true;
                                temps.Add(i);
                            }
                        }
                    if (!E2) pan = i;


                }
                strDrivers = temps;
            }
            else if (strDrivers.Count < strDriver0.Length)//磁盤數增加了表示有插入
            {
                for (int i = 0; i < strDriver0.Length; i++)
                {

                    bool E2 = false;
                    if (null != strDriver0[i])
                        foreach (string j in strDrivers)
                            if (strDriver0[i] == j) E2 = true;

                    if (!E2) pan = strDriver0[i];
                }
                strDrivers.Add(pan);
            }

            return pan;
        }

        /// <summary>
        /// 根據盤符得到卷標
        /// </summary>
        /// <param name="panfu">查找卷標的盤符</param>
        /// <returns>卷標</returns>
        public string Pan_name(string panfu)
        {
            string temp = "";
            try
            {
                DriveInfo[] dis = DriveInfo.GetDrives();
                foreach (DriveInfo di in dis)
                {
                    if (di.Name == panfu)
                        temp = di.VolumeLabel;
                }
                if (temp.Length == 0)
                    temp = "沒有卡名";
            }
            catch (Exception ex)
            {
                temp = ex.Message.Trim();
            }
          
            return temp;
        }
        /// <summary>
        /// 獲取磁盤剩餘空間
        /// </summary>
        /// <param name="panfu">驗證的磁盤</param>
        /// <returns>剩餘空間大小</returns>
        public long DaXiao(string panfu)
        {
            long temp = 0;
            try
            {
                foreach (DriveInfo di in DriveInfo.GetDrives())
                {
                    if (di.Name == panfu)
                        temp = di.TotalFreeSpace;
                }
            }
            catch { }
            return temp;
        }
        #endregion

        #region 可移動磁盤
        [DllImport("kernel32")]
        public static extern int GetDriveType(string drive);
        /// <summary>
        /// 可移動磁盤
        /// </summary>
        public List<String> RemoveDisk()
        {

            List<String> temps = new List<string>();
            try
            {
                String[] strDriver0 = Environment.GetLogicalDrives();//當前所有盤符
                for (int i = 0; i < strDriver0.Length; i++)
                {
                    if ((strDriver0[i] != "A:\\")&&(strDriver0[i] != "B:\\"))
                        if (GetDriveType(strDriver0[i]) == 2)
                        {
                            temps.Add(strDriver0[i]);
                        }
                }
                Thread.Sleep(100);
            }
            catch { }
            return temps;
        }

         #endregion
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章