|
- extern "C" _declspec(dllexport)int getLogicDiskInfo()
- {
- int DType;
- int si = 0;
- BOOL result;
- unsigned _int64 i64FreeBytesToCaller;
- unsigned _int64 i64TotalBytes;
- unsigned _int64 i64FreeBytes;
- float totalSize;//总空间
- float usableSize;//可用空间
- int DSLength = GetLogicalDriveStrings(0,NULL);//通过该函数获取所有驱动器字符串信息长度
- cout<<"长度为:"<<DSLength<<endl;
- ofstream in;//向文件写内容
- in.open("D:\\disk\\info.txt",ios::trunc);//ios::trunc表示在打开文件前将文件清空,由于是写入操作,当文件不存在则创建
- char* DStr = new char[DSLength];
- GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);
- for(int i=0;i<DSLength/4;++i)
- {
- char dir[3] = {DStr[si],':','\\'};
- //cout<<"磁盘名称为:"<<dir[0]<<dir[1]<<dir[2]<<endl;
- in<<"磁盘名称为:"<<dir[0]<<dir[1]<<dir[2]<<"\n";
- char str[3] = {0,0,0};
- str[0] = dir[0];
- str[1] = dir[1];
- string dirName = str;
- DType = GetDriveType((LPTSTR)DStr+i*4);//通过该函数获取磁盘的类型
- string driverType;
- if(DType == DRIVE_FIXED)
- {
- driverType = "本地磁盘";
- //cout<<driverType<<endl;
- in<<"磁盘类型为:"<<driverType<<"\n";
- }
- else if(DType == DRIVE_CDROM)
- {
- driverType = "光驱";
- //cout<<driverType<<endl;
- in<<"磁盘类型为:"<<driverType<<"\n";
- }
- else if(DType == DRIVE_REMOVABLE)
- {
- driverType = "可移动磁盘";
- //cout<<driverType<<endl;
- in<<"磁盘类型为:"<<driverType<<"\n";
- }
- else if(DType == DRIVE_REMOTE)
- {
- driverType = "网络磁盘";
- //cout<<driverType<<endl;
- in<<"磁盘类型为:"<<driverType<<"\n";
- }
- else if(DType == DRIVE_RAMDISK)
- {
- driverType = "虚拟RAM磁盘";
- //cout<<driverType<<endl;
- in<<"磁盘类型为:"<<driverType<<"\n";
- }
- else if(DType == DRIVE_UNKNOWN)
- {
- driverType = "未知设备";
- //cout<<driverType<<endl;
- in<<"磁盘类型为:"<<driverType<<"\n";
- }
- if(dirName == "C:")//当磁盘为C盘时
- {
- result = GetDiskFreeSpaceEx(_T("C:"),(PULARGE_INTEGER)&i64FreeBytesToCaller,(PULARGE_INTEGER)&i64TotalBytes,(PULARGE_INTEGER)&i64FreeBytes);//获取磁盘的空间状态
- if(result)
- {
- totalSize = (float)i64TotalBytes/1024/1024/1024;
- usableSize = (float)i64FreeBytesToCaller/1024/1024/1024;
- //cout<<"总空间为:"<<totalSize<<"GB"<<endl;
- //cout<<"可用空间为:"<<usableSize<<"GB"<<endl;
- //cout<<"=============================================================="<<endl;
- in<<"总空间为:"<<totalSize<<"GB"<<"\n";
- in<<"可用空间为:"<<usableSize<<"GB"<<"\n";
- in<<"=============================================================="<<"\n";
- }
- else
- {
- //cout<<"未检测到磁盘设备"<<endl;
- in<<"未检测到磁盘设备"<<"\n";
- }
- }
- else if(dirName == "D:")//当磁盘为D盘时
- {
- result = GetDiskFreeSpaceEx(_T("D:"),(PULARGE_INTEGER)&i64FreeBytesToCaller,(PULARGE_INTEGER)&i64TotalBytes,(PULARGE_INTEGER)&i64FreeBytes);//获取磁盘的空间状态
- if(result)
- {
- totalSize = (float)i64TotalBytes/1024/1024/1024;
- usableSize = (float)i64FreeBytesToCaller/1024/1024/1024;
- //cout<<"总空间为:"<<totalSize<<"GB"<<endl;
- //cout<<"可用空间为:"<<usableSize<<"GB"<<endl;
- //cout<<"=============================================================="<<endl;
- in<<"总空间为:"<<totalSize<<"GB"<<"\n";
- in<<"可用空间为:"<<usableSize<<"GB"<<"\n";
- in<<"=============================================================="<<"\n";
- }
- else
- {
- //cout<<"未检测到磁盘设备"<<endl;
- in<<"未检测到磁盘设备"<<"\n";
- }
- }
- else if(dirName == "E:")//当磁盘为E盘时
- {
- result = GetDiskFreeSpaceEx(_T("E:"),(PULARGE_INTEGER)&i64FreeBytesToCaller,(PULARGE_INTEGER)&i64TotalBytes,(PULARGE_INTEGER)&i64FreeBytes);//获取磁盘的空间状态
- if(result)
- {
- totalSize = (float)i64TotalBytes/1024/1024/1024;
- usableSize = (float)i64FreeBytesToCaller/1024/1024/1024;
- //cout<<"总空间为:"<<totalSize<<"GB"<<endl;
- //cout<<"可用空间为:"<<usableSize<<"GB"<<endl;
- //cout<<"=============================================================="<<endl;
- in<<"总空间为:"<<totalSize<<"GB"<<"\n";
- in<<"可用空间为:"<<usableSize<<"GB"<<"\n";
- in<<"=============================================================="<<"\n";
- }
- else
- {
- //cout<<"未检测到磁盘设备"<<endl;
- in<<"未检测到磁盘设备"<<"\n";
- }
- }
- else if(dirName == "F:")//当磁盘为F盘时
- {
- result = GetDiskFreeSpaceEx(_T("F:"),(PULARGE_INTEGER)&i64FreeBytesToCaller,(PULARGE_INTEGER)&i64TotalBytes,(PULARGE_INTEGER)&i64FreeBytes);//获取磁盘的空间状态
- if(result)
- {
- totalSize = (float)i64TotalBytes/1024/1024/1024;
- usableSize = (float)i64FreeBytesToCaller/1024/1024/1024;
- //cout<<"总空间为:"<<totalSize<<"GB"<<endl;
- //cout<<"可用空间为:"<<usableSize<<"GB"<<endl;
- //cout<<"=============================================================="<<endl;
- in<<"总空间为:"<<totalSize<<"GB"<<"\n";
- in<<"可用空间为:"<<usableSize<<"GB"<<"\n";
- in<<"=============================================================="<<"\n";
- }
- else
- {
- //cout<<"未检测到磁盘设备"<<endl;
- in<<"未检测到磁盘设备"<<"\n";
- }
- }
- else if(dirName == "G:")//当磁盘为E盘时
- {
- result = GetDiskFreeSpaceEx(_T("G:"),(PULARGE_INTEGER)&i64FreeBytesToCaller,(PULARGE_INTEGER)&i64TotalBytes,(PULARGE_INTEGER)&i64FreeBytes);//获取磁盘的空间状态
- if(result)
- {
- totalSize = (float)i64TotalBytes/1024/1024/1024;
- usableSize = (float)i64FreeBytesToCaller/1024/1024/1024;
- //cout<<"总空间为:"<<totalSize<<"GB"<<endl;
- //cout<<"可用空间为:"<<usableSize<<"GB"<<endl;
- //cout<<"=============================================================="<<endl;
- in<<"总空间为:"<<totalSize<<"GB"<<"\n";
- in<<"可用空间为:"<<usableSize<<"GB"<<"\n";
- in<<"=============================================================="<<"\n";
- }
- else
- {
- //cout<<"未检测到磁盘设备"<<endl;
- in<<"未检测到磁盘设备"<<"\n";
- }
- }
- si+=8;
- }
- in.close();//关闭文件
- if(NULL != DType)
- {
- return DType;
- }
- else
- {
- return -1;
- }
- }
- 该代码主要用来获取磁盘的盘符、磁盘的类型、磁盘的总空间大小以及磁盘的可用空间大小。
- public static Map<String, ReturnPo> getDiscInfo() {
- String dirName = "D:\\disk\";
- String fileName = "info.txt";
- String diskNameStr = "磁盘名称";
- String diskTypeStr = "磁盘类型";
- String totalSizeStr = "总空间";
- String usableSizeStr = "可用空间";
- String diskName = null;
- String diskType = null;
- float totalSize = 0;
- float usableSize = 0;
- Map<String, ReturnPo> map = new HashMap<String, ReturnPo>();
- ReturnPo returnPo = new ReturnPo();
- List<UsbPo> list = new ArrayList<UsbPo>();
- UsbPo usbPo = null;
- JNative jNative = null;
- try {
- jNative = new JNative("PCsuite", "getLogicDiskInfo");// 加载PCsuite.dll文件
- jNative.setRetVal(Type.INT);
- // jNative.invoke();
- File file = new File(dirName + fileName);// 实例化文件对象,读取一个放置于本地磁盘中存放磁盘信息的文件
- if (file.exists()) {
- BufferedReader br = new BufferedReader(new FileReader(file));
- String line = null;
- int count = 0;
- int number = 0;
- for (int i = 0; i <= count; i++) {
- while ((line = br.readLine()) != null) {
- if (number % 5 == 0) {
- usbPo = new UsbPo();// 实例化磁盘对象,用来存放磁盘信息
- }
- if (!"=============================================================="
- .equals(line)) {
- if (line.contains(diskNameStr)) {
- diskName = line
- .substring(line.indexOf(":") + 1);// 获取盘符名称
- usbPo.setName(diskName);// 设置盘符名称
- number++;
- } else if (line.contains(diskTypeStr)) {
- diskType = line
- .substring(line.indexOf(":") + 1);// 获取磁盘类型
- if (diskType.equals(localDiscName))// 当磁盘类型为本地磁盘时
- {
- usbPo.setFlag(0);// 当磁盘类型为本地磁盘时,设置为0
- number++;
- } else if (diskType.equals(moveDiscName))// 当磁盘类型为可移动磁盘时
- {
- usbPo.setFlag(1);// 当磁盘类型为可移动磁盘时,设置为1
- number++;
- }
- } else if (line.contains(totalSizeStr)) {
- totalSize = Float.parseFloat(line.substring(
- line.indexOf(":") + 1, line
- .indexOf("GB")));// 获取磁盘的总空间
- usbPo.setTotalSize(totalSize);// 设置磁盘的总空间
- number++;
- } else if (line.contains(usableSizeStr)) {
- usableSize = Float.parseFloat(line.substring(
- line.indexOf(":") + 1, line
- .indexOf("GB")));// 获取磁盘的可用空间
- usbPo.setUsableSize(usableSize);// 设置磁盘的可用空间
- number++;
- }
- if (null != usbPo && null != usbPo.getName()
- && !"".equals(usbPo.getName())
- && usbPo.getTotalSize() > 0
- && usbPo.getUsableSize() > 0) {
- list.add(usbPo);// 将磁盘信息添加一个列表中
- }
- } else {
- count++;
- number++;
- System.out.println("count is:" + count);
- }
- }
- }
- returnPo.setExcept(null);
- returnPo.setResultFlag(true);
- returnPo.setResultInfo(list);
- returnPo.setMethodId(InvokeMethod.methodId1);
- map.put(SocketServer.resultInfo, returnPo);
- } else {
- logger.error("not finding this file……");
- }
- } catch (NativeException e) {
- e.printStackTrace();
- returnPo.setExcept(e);
- returnPo.setResultFlag(false);
- returnPo.setResultInfo(e.getMessage());
- logger.error(e);
- map.put(SocketServer.resultInfo, returnPo);
- return map;
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- returnPo.setExcept(e);
- returnPo.setResultFlag(false);
- returnPo.setResultInfo(e.getMessage());
- logger.error(e);
- map.put(SocketServer.resultInfo, returnPo);
- return map;
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- returnPo.setExcept(e);
- returnPo.setResultFlag(false);
- returnPo.setResultInfo(e.getMessage());
- logger.error(e);
- map.put(SocketServer.resultInfo, returnPo);
- return map;
- } catch (IOException e) {
- e.printStackTrace();
- returnPo.setExcept(e);
- returnPo.setResultFlag(false);
- returnPo.setResultInfo(e.getMessage());
- logger.error(e);
- map.put(SocketServer.resultInfo, returnPo);
- return map;
- }
- return map;
- }
复制代码 做法概要:通过使用C++代码,编译生成相应的dll文件,然后通过JNative去调用生成的dll文件,并调取相应的方法进行检测。
(http://bbs.intohard.com/thread-113097-1-1.html) |
|