JAVASCRIPT完全自学手册,中源码的验证修订实例
源代码在线查看: 17-1 文件浏览器.hta
17-1 文件浏览器
* { 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; }
var fso;
//函数“$”根据指定字符串获取相应ID的对象
function $(str){ return(document.getElementById(str)); }
//将给定的字符串中的特殊字符替换为HTML实体
function html_encode(strV){ return(strV.replace(/&/g,"&").replace(/"/g,""").replace(/ /g," ").replace(/\t/g," ").replace(//g,">").replace(/\r\n/g,"")); }
//窗体载入完毕时初始化
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;
}
}