当前位置: 代码迷 >> 驱动开发 >> 贴一段U盘格式化的代码,为什么有时候成功,有时候不成功?该怎么解决
  详细解决方案

贴一段U盘格式化的代码,为什么有时候成功,有时候不成功?该怎么解决

热度:160   发布时间:2016-04-28 11:22:39.0
贴一段U盘格式化的代码,为什么有时候成功,有时候不成功?
BOOL FormatVolume(const TCHAR chVolume,TCHAR* strName,TCHAR* strType)
{

STARTUPINFO si;
PROCESS_INFORMATION pi;

TCHAR cmd[512] = {0};
TCHAR chdisk[3] = {0};
BOOL bRet;

ZeroMemory( &pi, sizeof(pi) );
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
si.lpDesktop = NULL;
si.lpTitle = NULL;
si.dwFlags = STARTF_USESHOWWINDOW;
si.dwX = 0;
si.dwY = 0;
si.dwFillAttribute = 0;
si.wShowWindow = TRUE;


char chPath[MAX_PATH] = {0}; //存放路径的变量
GetCurrentDirectory(MAX_PATH,chPath); //获取程序的当前目录
strcat(chPath,TEXT("\\"));

sprintf(cmd,TEXT("cmd.exe /c %s"),chPath);

bRet = CreateProcess(NULL,
cmd, // 没有模块名(使用命令行)
NULL, // 进程句柄不可继承
NULL, // 线程局并不可继承
FALSE, // 句柄继承标志
NULL,
NULL, // 使用父进程的环境变量
NULL, // 父进程的启动目录
&si, // STARTUPINFO结构指针
&pi); // PROCESS_INFORMATION结构指针
// 创建子进程 

if( !bRet) 
{
return FALSE;
}
WaitForSingleObject( pi.hProcess, INFINITE );
ZeroMemory( &pi, sizeof(pi) );
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
si.lpDesktop = NULL;
si.lpTitle = NULL;
si.dwFlags = STARTF_USESHOWWINDOW;
si.dwX = 0;
si.dwY = 0;
si.dwFillAttribute = 0;
si.wShowWindow = TRUE;
sprintf(cmd,TEXT("cmd.exe /c FormatDisk.bat %c %s %s"),chVolume,strName,strType);
bRet = CreateProcess(NULL,
cmd, // 没有模块名(使用命令行)
NULL, // 进程句柄不可继承
NULL, // 线程局并不可继承
FALSE, // 句柄继承标志
NULL,
NULL, // 使用父进程的环境变量
NULL, // 父进程的启动目录
&si, // STARTUPINFO结构指针
&pi); // PROCESS_INFORMATION结构指针
// 创建子进程 

if( !bRet) 
{
return FALSE;
}
// 等待子进程退出
WaitForSingleObject( pi.hProcess, INFINITE );

// 关闭进程和线程句柄
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

return TRUE;
}


FormatDisk.bat里面的内容如下:

@format %1:/y/v:%2/FS:%3

------解决方案--------------------
坏道占用处理时间超时。
  相关解决方案