在DOS环境下
在DOS环境下,有多种软件可以执行格式化的操作,系统通常也以外部命令的形式提供一个命令行界面的格式化软件“Format”。
Format命令的参数包括将被执行格式化的磁盘,以及一些其他次要参数,如簇的大小、文件系统的格式等。
Format命令通常的格式是:Format X:(X为所希望被执行格式化操作的盘符,如希望格式化C碟,则将X替换为C,如此类推。 加入"Q"参数可以执行快速格式化。
在Windows环境下
在Windows环境下,格式化的操作相对简单。
通常的操作步骤是:先打开我的电脑,再在希望被执行格式化的盘符图标上右击,然后选择“格式化”,再按照提示操作即可。需要注意的是:对硬盘执行格式化操作时,用户需要拥有系统管理员权限(仅限于 Windows Vista/2008/7/2008 R2/8/2012 操作系统。)。
在Windows环境中,除了可以使用图形化的操作界面执行格式化操作之外,也可以使用命令行的方式进行操作,具体的方法与DOS环境下类似。
在Unix/Linux环境下
在Unix/Linux环境下,通常使用mkfs命令执行格式化操作,mkfs命令需要的参数有设备路径和文件系统格式等。需要注意的是:对硬盘执行格式化操作时,用户需要拥有超级用户权限。
------------------------------------------------------
从实际应用的角度看,从Windows 9X到Windows NT都应该提供这个FormatDisk函数,否则怎么实现资源管理器窗口的磁盘格式化呢?笔者通过仔细查找发现,Windows 确实提供了这样一个函数,尽管文档资料没有注明,但是如果我们使用View Dependencies打开Shell2.dll,就会发现这个函数。它就是SHFormatDrive,编译连接到Shell32.lib。尽管通过平台的SDK文档和SHELLAPI.H文件并不能发现这个函数,但是Win32各个操作系统都能找到它的踪影。应用程序可以通过调用这个函数实现借用外壳的磁盘格式化对话框格式化磁盘。
SHFormatDrive,Win32 API函数。
SHFormatDrive函数可以格式化指定磁盘,并返回结果
调用约定如下:DWORD WINAPI SHFormatDrive(HWND hwnd,UINT drive,UINT fmtID,UINT options);参数含义如下:hwnd:拥有对话框的窗口句柄,注意hwnd为NULL时,并不会导致这个对话框生成一个上层的应用程序,也就是说,这个参数总是非NULL,这个对话框只能作为一个窗口的子窗口,而不能作为一个单独的应用程序;drive:要格式化的驱动器号,以A: == 0为基准,依此类推;fmtID:必须设定为 SHFMT_ID_DEFAULT,即0xFFFF;options:可以有两个选择项:SHFMT_OPT_FULL 0x0001和SHFMT_OPT_SYSONLY 0x0002,如果这一项设置为零,系统就要使用快速格式化作为默认设置。该函数的返回值要么为一个下列以SHFMT_开头的值,要么是一个成功格式化的磁盘标识。//上次格式化出错,磁盘可能被格式化#define SHFMT_ERROR 0xFFFFFFFFL//格式化被取消#define SHFMT_CANCEL 0xFFFFFFFEL// 不能进行磁盘格式化#define SHFMT_NOFORMAT 0xFFFFFFFDL实现步骤1.函数接口声明typedef DWORD (WINAPI *PFNSHFORMATDRIVE)(HWND hwnd,UINT drive,UINT fmtID,UINT options);2.加载Shell32.dll库HINSTANCE hInstance=LoadLibrary(_T(“Shell32.dll”));If(hInstance==NULL) return;3.获得函数指针PFNSHFORMATDRIVE pFnSHFormatDrive=(PFNSHFORMATDRIVE)GetProcessAddress(_T(“SHFormatDrive”));if(pFnSHFormatDrive==NULL){FreeLibrary(hInstance);return;}4.调用函数(pFnSHFormatDrive)(hwnd,drive/*a:==0*/,fmtID/* SHFMT_ID_DEFAULT */,options);5.释放句柄资源FreeLibrary(hInstance);Return;本程序在Windows 2000环境下调试通过,使用Delphi、Visual Basic的用户通过调用上述Windows SDK 函数也可以实现磁盘格式化。/*****************************************************************/也可以直接调用DWORD SHFormatDrive( HWND hwnd,UINT drive,//0 for A:, 2 for C:,...UINT fmtID,//SHFMT_ID_DEFAULT onlyUINT options//SHFMT_OPT_FULL取消快格,进行全格//SHFMT_OPT_SYSONLY 创建ms-dos启动盘);包含在头文件shlobj.h,for2k
--------------------------------------------------------------------------
SHFormatDrive pFnSHFormatDrive;HINSTANCE hInstance=LoadLibrary(_T ("Shell32.dll"));if(hInstance==NULL)return;pFnSHFormatDrive=(SHFormatDrive)GetProcAddress(hInstance,"SHFormatDrive");if(pFnSHFormatDrive==NULL){FreeLibrary(hInstance);return;}UINT OldMode = SetErrorMode(0); //得到缺省设置SetErrorMode(OldMode & !SEM_FAILCRITICALERRORS);//设置处理方式pFnSHFormatDrive(this->m_hWnd,3,0xFFFF,0x0000);SetErrorMode(OldMode); // 恢复缺省设置FreeLibrary(hInstance);