如何取得磁碟機相關資料?

如何使用C#取得磁碟機相關資料?

今天看到一個.Net程式再進行判斷磁碟空間時使用了Windows API,現在該系統要由Windows CE移植到Windows XP Embedded,不過卻發生了windows api的呼叫錯誤,我查了一下原來裡面拿來判斷磁碟空間的GetDiskFreeSpaceExCE中要引用coredll.dll而在XPE中要引用kernal32.dll,真是…

不過我有個疑惑就是為什麼.Net明明就有可以判斷磁碟空間的類別卻要呼叫Windows API ?

所以順手將這一段改成使用「DriveInfo」物件來進行判斷,避免哪天要移植回CE又要再搞一次

 

※ Samele Code

 

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace ConsoleGetDriveSpace
{
    class Program
    {
        static void Main(string[] args)
        {
            DriveInfo[] drvInfo = DriveInfo.GetDrives();
            foreach (DriveInfo o in drvInfo)
            {
                if (o.DriveType == DriveType.Fixed)
                {
                    Console.Write(
                        string.Format("磁碟機   : {0} \r\n"
                                    + "格式     : {1}\r\n"
                                    + "磁碟種類 : {2}\r\n"
                                    + "全部空間 : {3} byte\r\n"
                                    + "可用空間 : {4} byte\r\n==================================\r\n"
                                    , o.Name, o.DriveFormat, o.DriveType.ToString(), o.TotalSize.ToString(), o.AvailableFreeSpace.ToString())
                                );
                }
                else
                {
                    Console.Write(
                        string.Format("磁碟機   : {0}\r\n"
                                    + "磁碟種類 : {1}\r\n==================================\r\n"
                                    , o.Name, o.DriveType.ToString())
                                );
                }
            }
        }
    }
}

 

 

※ 執行結果

C#GetDriveSpace

 

※ 注意事項

  1. 請記得引用 System.IO
  2. 由於DeiveType.GetDrives()的用法會將所有的磁碟機通通取出來,包含軟碟以及光碟機,所以在取回空間的時候請先判斷DriveType,否則若光碟機中沒有放光碟你卻去讀取空間大小的話會造成例外狀態。

 

===========================這是簽名檔分隔線==============================
我沒有甚麼技術能力
不過卻希望在這邊跟大家分享自己遭遇的一些問題
希望大家有更好的方法可以跟我說!!
======================================================================