原創作品,允許轉載,轉載時請務必以超連結形式標明文章
原始出處 、作者資訊和本聲明。否則將追究法律責任。http://cutebunny.blog.51cto.com/301216/625762
格式化分區平常在我們看來是再普通不過的操作了,點兩下滑鼠就可以搞定的事情,但是在程式中實現的的確確不太容易。可能有人說直接調個format命令不就好了,沒錯,但系統命令存在我們第一節http://cutebunny.blog.51cto.com/301216/624027中闡述的種種問題。
算上format命令,目前我發現有三種方法,1.Windows API SHFormatDrive。函數原型如下DWORD SHFormatDrive(HWND hwnd,UINT drive,UINT fmtID,UINT options);參數drive就是需要格式化的分區,從0開始計數。0代表A: ,2代表C: 等等。其餘參數詳見MSDN。調用這個函數回彈出我們非常熟悉的對話方塊,相信我們右鍵格式化調用的就是它。
調用方法很簡單:
SHFormatDrive(0, 8, SHFMT_ID_DEFAULT, SHFMT_OPT_FULL);
不幸的是,這個API無法讓格式化自動開始,無論如何都不可以,必須手動去點一下“開始”。鬱悶了吧,有人建議可以搞個定時器,再去類比一下Enter,等格式化完了再Enter一次。原理上可行,但總覺著有些不倫不類。 2.利用FMIFS.dll中的未公開函數FormatEx有位叫Mark Russinovich的大牛寫出了具體代碼,我暫時還沒花時間去調,僅供大家參考。代碼詳見附件。有人好像做成功了,具體請參考http://forum.sysinternals.com/creating-partitions-on-xp_topic3029.html 3.Format命令這是沒辦法中的辦法了,代碼如下,很簡單,不多解釋。/******************************************************************************* Function:* input: disk, disk name* output: N/A* return: Succeed, 0* Fail, 1******************************************************************************/DWORD FormatVolume(CHAR letter){ DWORD ret; CHAR cmd[64]; sprintf(cmd, "format %c: /FS:NTFS /Q /Y", letter); ret = (DWORD)system(cmd); return ret;}
總結關於windows下磁碟操作編程的討論到這裡就告一段落了,最後再總結一下我們前面列舉的所有例子。DWORD GetAllPresentDisks(DWORD **disks); //查詢系統下的所有物理磁碟號DWORD GetSystemDiskPhysicalNumber(void); //擷取作業系統所在的物理磁碟號DWORD GetPhysicalDriveFromPartitionLetter(CHAR letter); //根據邏輯分區號查詢物理磁碟號DWORD GetDriveGeometry(const CHAR *disk, DISK_GEOMETRY *pdg); //查詢磁碟物理資訊DWORD GetDiskDriveLayout(const CHAR *disk, DRIVE_LAYOUT_INFORMATION_EX *driveLayout); //查詢磁碟分割資訊DWORD DestroyDisk(DWORD disk); //刪除磁碟分割表DWORD CreateDisk(DWORD disk, WORD partNum); //初始化磁碟並建立分區DWORD GetPartitionLetterFromPhysicalDrive(DWORD pDriveNumber, CHAR **letters); //查詢某塊物理磁碟上的所有分區DWORD FormatVolume(CHAR letter); //格式化分區 上述函數有些相當危險,可能瞬間就破壞掉磁碟分割表,大家調試的時候請多加小心。當然,也不要用它來做壞事哦。
本文出自 “bunny技術坊” 部落格,請務必保留此出處http://cutebunny.blog.51cto.com/301216/625762