您的位置:首页 > 移动开发 > Objective-C

遍历各磁盘(包括本地硬盘,光盘,可移动磁盘)及查找某文件并启动

2010-08-27 18:18 453 查看
下方代码是我为了查找可移动磁盘上的某文件并自动执行它的一段程序;

GetLogicalDriveStrings得到各磁盘的drivename,依次遍历,查找类型是DRIVE_REMOVABLE的盘符,并通过调用FindFirstFile来进行查找Test.exe,如果查找成功则启动之。

 

其实,我在想是否还要加一个FindNextFile判断,若是有2个存在的话要怎么处理呢?比如2个不同的磁盘分区中分别有一个Test.exe。

 

这个还有待继续考证一下。

 

 

int nBufLen;
TCHAR pBuf[255];
memset(pBuf, '/0', 255);
GetLogicalDriveStrings(sizeof(pBuf)/sizeof(TCHAR), pBuf);

//获取各光盘盘符
DWORD nBufferLength = BUFSIZE;
DWORD dwDevIndex =0, dwDeviceNum =0;

TCHAR* lpSingleDevice = (TCHAR*)malloc(sizeof(TCHAR)*MAX_DRIVER_LEN);

if (!lpSingleDevice)
{
return FALSE;
}

TCHAR pbuff[BUFSIZE];
//pbuff[0] = '/0';
memset(lpSingleDevice, 0x0, MAX_DRIVER_LEN);
memset(pbuff, 0x0, BUFSIZE);

DWORD dwBufLen = GetLogicalDriveStrings(BUFSIZE - 1, pbuff);//列举盘符

for (DWORD i = 0; i < dwBufLen; i++)
{
if (pbuff[i] != 0x00)//分离各个盘符
{
lpSingleDevice[dwDevIndex] = pbuff[i];
dwDevIndex++;
continue;
}

lpSingleDevice[dwDevIndex]  = 0x0;
dwDevIndex = 0;
if(*lpSingleDevice == 'A')  //A盘 不需要
continue;
if(GetDriveType(lpSingleDevice) == DRIVE_REMOVABLE/*DRIVE_CDROM*/)   //获取移动磁盘
{
CString strDevName = lpSingleDevice ;
strDevName += _T("//Test.exe");

WIN32_FIND_DATA lpFindData;
HANDLE hFind = INVALID_HANDLE_VALUE;//定义查找句柄

hFind = FindFirstFile(strDevName, &lpFindData);

if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid file handle. Error is %u/n", GetLastError());
return (-1);
}
else
{
PROCESS_INFORMATION   Pi;
STARTUPINFO   Si;

memset(&Si,   0,   sizeof(STARTUPINFO));
Si.cb   =   sizeof(STARTUPINFO);
Si.dwFlags   =   STARTF_USESHOWWINDOW;
Si.wShowWindow   =   SW_SHOWMAXIMIZED/*SW_SHOWNORMAL*/;

if (0 != CreateProcess(strDevName/*_T("Test.exe")*/,NULL,NULL,NULL,FALSE,0,NULL,NULL,&Si,&Pi))
{
WaitForSingleObject(Pi.hProcess, INFINITE);
//if (WAIT_OBJECT_0 == WaitForSingleObject(Pi.hProcess, 10000))
//{
//	AfxMessageBox(_T(""))
//}
}else
{
DWORD Err = GetLastError();
printf(_T("Run Test.exe failed!"));
return FALSE;
}
//ShellExecute(hFind, NULL, strDevName, NULL, NULL, SW_SHOWNORMAL);
}

dwDeviceNum++;
}
}

return 0;


 

 

Over。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  磁盘 null object file