`

获取磁盘信息并扫描是否连接移动磁盘之JS版

    博客分类:
  • JS
阅读更多

昨天弄了一天“扫描U盘是否连接到电脑”的功能,折腾了一天出了个java版和js版,这里记录下JS版本。

先说说思路:从浏览器的地址栏打开网页之后,通过onload事件调用ActiveXObject判断U盘是否连接到电脑,若是连接了获取信息显示到table中,若是没有每隔2秒调用一次事件进行获取,获取到之后清空计时器并将U盘信息显示到页面。PS:全程只获取一个U盘的信息。

 

1、页面基本结构:

<body  onload="checkDisk();">
	<table width="100%" border="0" cellspacing="0" cellpadding="0" class="ztb_l" id="upanTable">
		<tr>
			<td>盘符路径(Path)</td>
			<td>文件系统类型(FileSystem)</td>
			<td>驱动器类型(DriveType)</td>
			<td>驱动器对象的字母(DriveLetter)</td>
			<td>驱动器是否准备好或是否损坏(IsReady)</td>
			<td>卷标名(VolumeName)</td>
			<td>驱动器对象的跟文件夹(RootFolder)</td>
			<td>可用容量大小(AvailableSpace)</td>
			<td>总空间容量大小(TotalSize)</td>
		</tr>
	</table>
</body>

2、JS查询:

var tt = 2 *1000;//2秒扫描一次
var interval=null;
/**
 * 该方法用来检测U盘是否存在,若是存在则显示在页面中,若是不存在则扫描识别直至电脑连接上U盘
 * @param flag:1-移动磁盘 2-本地磁盘 非1和2其他磁盘信息,若有多个磁盘页面只显示一个磁盘信息
 */
function checkDisk(){
	//diskArr = getDiskInfo(3,1);//查询所有磁盘信息并返回结果集
	diskArr = getDiskInfo(1,1);//查询所有可移动磁盘信息并返回结果集
	if(diskArr.length>0){//说明连接了U盘
		//appendDiskInfoToTable(diskArr);//显示全部
		appendDiskInfoToTable(diskArr[0]);//取其中一个显示到页面
		/*
		var x = diskArr[0];
		var diskInfo=x.Path+"\n"+x.FileSystem+"\n"+x.DriveType+"\n"+x.DriveLetter+"\n"
			   +x.IsReady+"\n"+x.VolumeName+"\n"+x.RootFolder+"\n"+getDiskSpace(x.AvailableSpace,1,2)+"\n"
			   +getDiskSpace(x.TotalSize,1,2);
		alert(diskInfo);
		*/
	}else{//没有连接,那么循环查找并直接将结果显示到页面
		interval = window.setInterval("getDiskInfo(1,3)",tt);//重复加载
	}
}

/**
 * 该方法用来获取所有磁盘的基本信息
 * @param flag:获取的磁盘类型信息:1-获取可移动磁盘信息 2-获取本地磁盘信息 默认获取所有磁盘信息
 * @param result:处理结果 1-返回结果集 2-直接将所有结果集显示到页面上 3-将第一个结果集显示到页面上
 * @return array:集合
 * */
function getDiskInfo(flag,result){
	var diskArr=new Array();//初始化
	
	if(flag==null || flag==undefined) flag=3;
	if(result==null || result==undefined) result=1;//默认返回结果
	
	var e, x;
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var bfResult = false;
	e = new Enumerator(fso.Drives);
	flag = parseInt(flag,10);
	result = parseInt(result,10);
	
	for (; !e.atEnd(); e.moveNext()) {
		x = e.item();// 获取每个盘符的基本信息
		switch(flag){
			case 1:{//移动磁盘
				if(x.DriveType==1){
					diskArr.push(x);
				}
				break;
			}
			case 2:{//获取本地磁盘
				if(x.DriveType==2){//固定磁盘
					diskArr.push(x);
				}
				break;
			}
			default:{//全部磁盘
				diskArr.push(x);
				break;
			}
		}
	}
	//处理结果
	switch(result){
		case 2:{//将所有结果返回到页面
			if(diskArr.length>0){
				clearInterval(interval);//清除计时器
				appendDiskInfoToTable(diskArr);
			}
			break;
		}
		case 3:{//将第一个结果集显示到页面上
			if(diskArr.length>0){
				appendDiskInfoToTable(diskArr[0]);
				clearInterval(interval);//清除计时器	
			}
			break;
		}
	}
	return diskArr;
}

/**
*获取磁盘基本信息拼接到table中
*@param diskArray:进行添加的磁盘集合
**/
function appendDiskInfoToTable(diskArray){
	var tableHtml="";
	if(isArray(diskArray)){//是数组
		for(var i=0;i<diskArray.length;i++){
			tableHtml +=addTrHtml(diskArray[i]);// 获取每个盘符的基本信息
		}
	}else{//不是数组
		tableHtml = addTrHtml(diskArray);
	}
	$("#upanTable").append(tableHtml);
}

function addTrHtml(diskArray){
	var trHtml="";
	trHtml +="<tr>"
		   +"<td>"+diskArray.Path+"</td>"
		   +"<td>"+diskArray.FileSystem+"</td>"
		   +"<td>"+diskArray.DriveType+"</td>"
		   +"<td>"+diskArray.DriveLetter+"</td>"
		   +"<td>"+diskArray.IsReady+"</td>"
		   +"<td>"+diskArray.VolumeName+"</td>"
		   +"<td>"+diskArray.RootFolder+"</td>"
		   +"<td>"+getDiskSpace(diskArray.AvailableSpace,1,2)+"</td>"//可用空间大小(与剩余空间大小结果相同)
		   //+"<td>"+getDiskSpace(diskArray.FreeSpace)+"</td>"//剩余空间大小
		   +"<td>"+getDiskSpace(diskArray.TotalSize,1,2)+"</td>"
		   +"</tr>";
return trHtml;
}

/**
 * 该方法用来格式化U盘显示信息
 * @param space:磁盘空间容量,以byte为单位
 * @param flag:1-GB 2-MB 3-KB 4-B 默认为GB
 * @param fix:保留的小数位 1-###0.## 2-###0.0#
 * @return 值+单位
 * **/
function getDiskSpace(space,flag,fix){
	var unit = getDiskUnit(flag);
	var value = space/unit;
	value = value.toFixed(fix)+getCell(flag);//保留位数+单位
	return value;
}

/**
 * 该方法用来获取单元名称
 * @param flag:1-GB 2-MB 3-KB 4-B 默认为GB
 * **/
function getCell(flag){
	flag = parseInt(flag,10);
	var cell = "GB";
	switch(flag){
	case 2:{
		cell = "MB";;// MB
		break;
	}
	case 3:{
		cell = "KB";;// KB
		break;
	}
	case 4:{
		cell = "B";;// B
		break;
	}
	default:
		cell = "GB";;// GB
		break;
	}
	return cell;
}
/**
 * 该方法用来获取磁盘容量显示方式:1-GB 2-MB 3-KB 4-B 默认为GB
 * @return 磁盘单位,如GB:1024*1024*1024 MB:1024*1024 KB为:1024 B为:1
 **/
function getDiskUnit(flag){
	flag = parseInt(flag,10);
	var unit = 1024 * 1024 * 1024;// 将磁盘格式化为GB,默认值
	switch(flag){
	case 2:{
		unit = 1024 * 1024;// MB
		break;
	}
	case 3:{
		unit = 1024;// KB
		break;
	}
	case 4:{
		unit = 1;// B
		break;
	}
	default:
		unit = 1024 * 1024 * 1024;// GB
		break;
	}
	return unit;
}

/**
 * 判断是不是数组
 * **/
var isArray = function(obj) { 
	return Object.prototype.toString.call(obj) === '[object Array]'; 
};

 3、DriverType 0-5的范围的意思:

Unknown 0 无法确定驱动器类型。
Removable 1 可移动媒体驱动器,包括软盘驱动器和其他多种存储设备。
Fixed 2 固定(不可移动)媒体驱动器,包括所有硬盘驱动器(包括可移动的硬盘驱动器)。
Remote 3 网络驱动器,包括网络上任何位置的共享驱动器。
CDROM 4 CD-ROM 驱动器,不区分只读和可读写的 CD-ROM 驱动器。
RAMDisk 5 RAM 磁盘,在本地计算机中占用一块“随机存取内存”(RAM) 虚拟为磁盘驱动器。

分享到:
评论

相关推荐

    实现磁盘的整体扫描!扫描电脑本机的需要的文件格式!

    a) 获取根目录:首先,程序需要获取磁盘的根目录,例如"C:\"。 b) 遍历目录:使用文件遍历函数开始从根目录开始遍历,对每个目录项进行以下操作。 c) 检查文件类型:对于每个文件,检查其文件名,特别是其扩展名...

    本地硬盘识别成可移动磁盘的解决办法

    标题中的“本地硬盘识别成可移动磁盘的解决办法”是一...对于描述中提到的具体问题,详细步骤和解决方案通常会包含在名为“本地硬盘识别成可移动磁盘的解决办法.docx”的文档中,你可以打开该文档获取具体的操作指南。

    磁盘清理工具 智能分析扫描整理磁盘

    它通过智能分析和扫描技术,能够快速定位并清理不必要的文件,从而释放硬盘空间,提高系统性能。在现代计算机使用中,随着数字内容的不断积累,磁盘空间的管理变得越来越重要。下面我们将深入探讨磁盘清理工具的功能...

    最全磁盘性能指标和健康度扫描检测工具

    通过运行这款软件,用户可以轻松获取磁盘的各项详细信息,包括上述提到的性能指标和健康状况。它可以帮助用户了解磁盘的实际工作状态,预防可能出现的问题,保障数据安全。 总的来说,磁盘性能和健康度的监测对于...

    操作系统实验磁盘调度扫描算法循环扫描算法.doc

    本实验主要探讨两种磁盘调度算法:扫描算法(SCAN)和循环扫描算法(CSCAN),这两种算法都是为了优化磁头移动,减少寻道时间。 1. 扫描算法(SCAN算法) 扫描算法模拟电梯调度的原理,磁头从磁盘的一端(如外圈)...

    WizTree 扫描磁盘空间占用

    WizTree的工作原理是通过直接访问NTFS文件系统的MFT(主文件表)来获取文件信息,这种方式比传统的逐个文件扫描速度更快。它以树状结构显示文件系统,最大的文件和目录会出现在顶部,便于用户优先处理。 使用...

    外接磁盘U盘识别.rar

    `Form1.cs`中可能包含了对外部磁盘的扫描和识别逻辑,可能使用了Windows API来获取磁盘信息。`判断驱动器类型.csproj`文件则定义了项目的构建规则,包括引用的库、编译选项等。当程序运行时,它会读取`app.config`中...

    java磁盘调度

    本文将深入探讨三种常见的磁盘调度算法:先来先服务(FCFS)、最短寻道时间优先(SSTF)以及扫描(SCAN)算法,并简要介绍循环扫描(CSCAN)算法。 1. 先来先服务(FCFS)算法: FCFS是最简单的磁盘调度策略,按照请求的顺序...

    扫描磁盘所有文件的例子 (2KB)...

    这个"扫描磁盘所有文件的例子"展示了如何使用VB来遍历一个磁盘或目录中的所有文件,并进行相应的操作。2KB的源代码虽然小巧,但包含了核心的文件遍历逻辑。下面将详细解析这个知识点。 首先,我们需要了解VB中的...

    操作系统课程设计-磁盘调度算法设计

    在实际编程中,你可以通过读取R.txt文件获取磁盘请求序列,然后根据所选的调度算法计算出磁头的移动路径,并将结果保存到d.txt文件中。你可以利用MFC的文件操作函数,如CFile类,来处理输入输出文件。同时,你可能还...

    使用c语言写的磁盘碎片整理程序

    1. 扫描磁盘:程序首先会遍历整个磁盘,获取每个文件的位置和大小信息。 2. 分析碎片:根据扫描结果,程序分析哪些文件是碎片化的,即不连续存储的。 3. 制定整理计划:确定最优的文件移动策略,以最小化整理过程中...

    Twain、Wia两种扫描方式DEMO

    5. **执行扫描**: 调用Transfer方法,执行扫描操作并将图像数据传输到内存或磁盘。 6. **处理图像**: 获取的图像数据可以直接处理,例如调整大小、裁剪、添加水印等。 7. **释放资源**: 关闭设备连接,释放占用的...

    SpaceSniffer(磁盘空间分析工具)

    2. **实时扫描**:在启动SpaceSniffer后,它会迅速对选定的磁盘进行深度扫描,并实时更新文件和文件夹的大小信息,无需等待漫长的过程。 3. **深度分析**:不仅显示大文件,小文件也能被清晰呈现,方便用户查找隐藏...

    【报告+全代码】C++模拟FCFS、SSTF、SCAN磁盘调度算法.docx

    磁盘调度算法是操作系统中用于管理磁盘I/O操作的重要组成部分,主要目的是优化磁头的移动,以提高硬盘数据读写效率。本报告将详细讨论并以C++模拟三种常见的磁盘调度算法:FCFS(First-Come, First-Served)、SSTF...

    硬盘扫描 vb.net

    1. **枚举驱动器**:使用`DriveInfo`类,可以获取计算机上所有可用驱动器的信息,包括驱动器类型(例如,固定硬盘、可移动存储等)。 2. **遍历文件夹**:通过`DirectoryInfo`类,可以递归地访问每个驱动器的文件夹...

    扫描本地视频并获取缩略图Demo

    在IT行业中,尤其是在移动应用开发或者多媒体处理领域,获取视频的缩略图是一项常见的需求。这个"扫描本地视频并获取缩略图Demo"提供了一个很好的示例,它可以帮助开发者了解如何在自己的应用程序中实现类似的功能。...

    磁盘碎片清理

    本文将深入探讨这些概念,并提供实用的磁盘碎片整理技巧。 首先,我们要理解什么是“磁盘碎片”。在计算机中,硬盘是数据的主要存储介质。当文件被创建、修改或删除时,硬盘上的数据块可能会被分散存储,形成所谓的...

    操作系统.ppt 操作系统有责任高效地使用硬件——对于磁盘设备,这意味着很短的访问时间和磁盘带宽。

    操作系统是计算机系统的核心组件,负责管理和控制硬件资源,其中磁盘管理是其关键职责之一。磁盘设备的高效使用对系统的整体性能至关重要,这涉及到磁盘的访问时间和磁盘带宽的优化。 磁盘结构通常由一系列逻辑块...

Global site tag (gtag.js) - Google Analytics