JavaScript操作本地文件

版权所有,禁止匿名转载;禁止商业使用。

1.文件浏览器   可以用于浏览本地的文件夹和文件。其实现了动态读取本地文件系统的内容。

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";
    }
   
}


0 0