遍历各磁盘(包括本地硬盘,光盘,可移动磁盘)及查找某文件并启动
2010-08-27 18:18
453 查看
下方代码是我为了查找可移动磁盘上的某文件并自动执行它的一段程序;
GetLogicalDriveStrings得到各磁盘的drivename,依次遍历,查找类型是DRIVE_REMOVABLE的盘符,并通过调用FindFirstFile来进行查找Test.exe,如果查找成功则启动之。
其实,我在想是否还要加一个FindNextFile判断,若是有2个存在的话要怎么处理呢?比如2个不同的磁盘分区中分别有一个Test.exe。
这个还有待继续考证一下。
Over。
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。
相关文章推荐
- 在本地磁盘中查找文件
- C语言实现文件复制 磁盘遍历 文件查找
- Vmware使用技巧:“设置U盘、光盘启动、本地文件共享、安装Ghost版系统”图文教程
- Spring-boot 微服务jar包方式启动,获取jar内资源文件到本地磁盘
- 获取本地所有磁盘并遍历磁盘下所有文件、文件夹
- 移动硬盘新加卷变为本地磁盘且不能打开磁盘查看文件
- 在本地磁盘中查找文件
- 遍历电脑整个硬盘查找指定格式文件
- 关于perl遍历目录查找特定文件的事情
- 远程桌面复制文件到本地磁盘
- RedHat企业版6.0 通过安装光盘或ISO文件制作本地yum源
- windows的磁盘操作之九——区分本地磁盘与移动硬盘
- 硬盘文件丢失,启动报错ORA-01157
- java web中监听本地磁盘文件,并进行上传,复制,处理等
- 从本地目录中清除文件包括文件夹
- VC++中如何遍历整个目录树查找文件
- » 在 Ubuntu 上使用 sshfs 映射远程 ssh 文件系统为本地磁盘 Wow! Ubuntu
- c# winform项目treeview控件绑定本地电脑磁盘信息,读取文件夹信息,显示文件夹内文件内容
- java15.语言进阶------本地文件操作---遍历文件夹
- 利用递归算法遍历所有文件并打印文件绝对路径(包括文件夹)