⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 17-1 文件浏览器.hta

📁 JAVASCRIPT完全自学手册,中源码的验证修订实例
💻 HTA
字号:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=GB2312" />
<title>17-1  文件浏览器</title>
<style>
* { font-size:12px; font-family:宋体, Arial; } /*规定了所有的字体样式*/
body { overflow:auto; }
table { width:100%; }
a { color:blue; line-height:20px; width:100%; overflow:visible; padding:0px 5px; text-decoration:none; }
a:hover { background-color:#EFEFFF; color:black; }
</style>
<script>
var fso;
//函数“$”根据指定字符串获取相应ID的对象
function $(str){ return(document.getElementById(str)); }
//将给定的字符串中的特殊字符替换为HTML实体
function html_encode(strV){ return(strV.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/ /g,"&nbsp;").replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\r\n/g,"<br>")); }
//窗体载入完毕时初始化
window.onload = function(){
    //创建FSO控件
    fso = new ActiveXObject("Scripting.FileSystemObject");
    //初始化显示
    show_folder();
}

//获取系统中的所有驱动器
function get_drives(){
    //根据FSO的drives属性进行枚举
	var drvs=new Enumerator(fso.drives);
	//将返回值保存在数组中
	var re=[];
	//循环枚举过程
	while(drvs.item()){
		re.push(String(drvs.item()));
		drvs.moveNext();
	}
	return(re);
}

//获取指定目录下的文件
function get_subfiles(fd_path){
    //调用FSO的getFolder方法获取文件夹对象
	var fd=fso.getFolder(fd_path);
	//获取子文件
	var fds=new Enumerator(fd.files);
	var re=[];
	//枚举子文件列表
	while(fds.item()){
	    //将文件路径存入数组
		re.push(String(fds.item()));
		fds.moveNext();
	}
	return(re);
}

//获取指定目录下的子目录
function get_subfolders(fd_path){
    //调用FSO的getFolder方法获取文件夹对象
	var fd=fso.getFolder(fd_path);
	//获取子文件夹列表
	var fds=new Enumerator(fd.subfolders);
	var re=[];
	//枚举子文件夹列表
	while(fds.item()){
	    //将文件夹路径存入数组
		re.push(String(fds.item()));
		fds.moveNext();
	}
	return(re);
}

//以指定方式打开文件
function f_open(fileName, openMode, createIfNotExists){
	return(fso.OpenTextFile(fileName, openMode, createIfNotExists));
}

//以文本方式一次性读取指定文件的所有内容并返回
function read_all(fileName){
	var f, re;
	//打开文件
	f = f_open(fileName, 1);
	//读出文件内容
	try{ re = f.ReadAll(); }catch(e){}
	//关闭文件
	f.Close();
	return(re);
}

//显示指定文件夹的内容
function show_folder(path){
    var folders, files, pfolder, tb, row, cell, obj, of, ext;
    //如果指定的文件夹路径存在
    if(path && fso.folderExists(path)){
        //获取子文件夹和文件名
        folders = get_subfolders(path);
        files = get_subfiles(path);
        //获取指定的文件夹对象
        pfolder = fso.getFolder(path).parentFolder;
        if(pfolder == path)pfolder = "";
    }else{
        //如果路径不存在则获取所有磁盘驱动器列表
        folders = get_drives();
        files = [];
        pfolder = "";
    }
    //清空原先的显示
    $("hutia").innerHTML = "";
    //生成用于输出的表格
    tb = document.createElement("table");
    $("hutia").appendChild(tb);
    //如果指定的路径存在
    if(path){
        //显示回到父文件夹的链接
        row = tb.insertRow(); cell = row.insertCell();
        cell.colSpan = 3;
        obj = document.createElement("a");
        cell.appendChild(obj);
        obj.path = pfolder;
        obj.innerHTML = "..\\"
        obj.href="#";
        obj.onclick = nav;
        //改变“当前路径”标题
        $("f_title").innerHTML = path;
    }else{
        //指定路径不存在,显示“我的电脑”
        $("f_title").innerHTML = "我的电脑";
    }
    //显示所有的子文件夹
    for(var i in folders){
        if(!folders[i])continue;
        //依次获取每个子文件夹对象
        of = path?fso.getFolder(folders[i]):folders[i];
        //插入新行
        row = tb.insertRow();
        cell = row.insertCell(); cell.width = "20px";
        //第一个单元格插入文件夹的图标
        obj = document.createElement("img");
        cell.appendChild(obj);
        obj.src = "inc\\img\\folder.gif";
        //第二个单元格插入子文件夹名称
        cell = row.insertCell();
        obj = document.createElement("a");
        cell.appendChild(obj);
        obj.path = folders[i];
        obj.innerHTML = path?of.name:of;
        obj.href="#";
        //当子文件夹名称被点击,则调用函数“nav”
        obj.onclick = nav;
        //第三个单元格显示文件夹类型
        cell = row.insertCell(); cell.width = "80px";
        cell.innerHTML = path?of.type:"Disk";
    }
    //显示所有子文件
    for(var i in files){
        if(!files[i])continue;
        //依次获取每个文件对象
        of = path?fso.getFile(files[i]):files[i];
        //获取文件扩展名
        ext = String(files[i].match(/[^\.]+$/));
        //插入新行
        row = tb.insertRow();
        cell = row.insertCell();
        //第一个单元格插入文件的图标
        obj = document.createElement("img");
        cell.appendChild(obj);
        //根据文件扩展名的不同显示不同的图标
        obj.src = "inc\\img\\"+(/^doc|htm|html|ppt|rar|txt|xls|zip$/i.test(ext)?("s."+ext+".gif"):"page_white.gif");
        //第二个单元格插入文件名称
        cell = row.insertCell();
        obj = document.createElement("a");
        cell.appendChild(obj);
        obj.path = files[i];
        obj.ext = ext;
        obj.innerHTML = path?of.name + ":" + of.type:of;
        obj.href="#";
        //当文件名称被点击,则调用函数“view”
        obj.onclick = view;
        //第三个单元格显示文件类型
        cell = row.insertCell();
        cell.innerHTML = path?of.type:"Disk";
    }
    
}

//显示此文件夹的内容
function nav(){ show_folder(this.path); }

//如果此文件是“txt”文件则读取并显示其内容
function view(){
    if(/txt/i.test(this.ext)){
        var win=window.open();
        win.document.write(html_encode(read_all(this.path)));
        win.document.close();
        win.document.title = "View - " + this.path;
    }
}

</script>
</head>
<body>
<fieldset>
<!-- 标题区,用于显示当前的文件夹路径 -->
<legend id="f_title"></legend>
<!-- 用于输出的容器DIV -->
<div id="hutia"></div>
</fieldset>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -