windows的磁碟操作之八——格式化分區的思考

來源:互聯網
上載者:User
原創作品,允許轉載,轉載時請務必以超連結形式標明文章
原始出處 、作者資訊和本聲明。否則將追究法律責任。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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.