用JS写了一个遍历文件夹获取每个文件信息的网页,但是点打开浏览对话框,选择路径时总提示“没有权限”,求高人指点

时间:2022-02-03 23:05:15
]如题(目的就是为了获取指定路径下所有文件,包括子文件夹内的文件的一些属性信息。)
   直接输入路径倒是可以遍历。还有一个问题,就是如果浏览器禁用了activex时,即使输入路径也不能遍历。大家有什么好方法吗?
  Index.html文件代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>遍历测试</title>
<script type="text/javascript" src="js/Traverse.js"></script>
<script type="text/javascript">
function browse(){
document.all.getfolder.value=BrowseFolder();
}
function viewfiles(){
var textHtml="";
var folderpath=document.all.getfolder.value;
textarea.innerHTML=traverse(folderpath,textHtml)+"共遍历文件数:"+countfiles+"<br/>"+"共遍历文件夹数:"+countfolders;
}

</script>
</head>
<body>
 指定文件夹:<input type="text" name="getfolder">
 <input type="button" value="选择文件夹" onclick="browse()">
 <input type="button" value="查看文件信息" onclick="viewfiles()">
 <div id="textarea">
 
 </div>
</body>
</html>


JS文件 Traverse.js

var countfiles=0;
var countfolders=0;

//用于打开浏览对话框,选择路径
function BrowseFolder(){
try{
    var Message = "请选择文件夹";   //选择框提示信息
     var Shell = new ActiveXObject( "Shell.Application" );
    var Folder = Shell.BrowseForFolder(0,Message,0x0040,0x11);//起始目录为:我的电脑
    //var Folder = Shell.BrowseForFolder(0,Message,0); //起始目录为:桌面
    if(Folder != null){
      Folder = Folder.items(); // 返回 FolderItems 对象
      Folder = Folder.item(); // 返回 Folderitem 对象
      Folder = Folder.Path;    // 返回路径
      if(Folder.charAt(Folder.length-1) != "\\"){
        Folder = Folder + "\\";
      }
      //document.all.getfolder.value=Folder;
      return Folder;
    }
}
catch(e){ 
    alert(e.message+"11");
}
}

//用于遍历
function traverse(localPath,textHtml){
var fso = new ActiveXObject("Scripting.FileSystemObject");
    var currentFolder = fso.GetFolder(localPath);
    var fileList = new Enumerator(currentFolder.files);
    var subFolderList = "";
    var fileHtml=textHtml;
    var aFile;
    for (; !fileList.atEnd(); fileList.moveNext())
        {
         countfiles++;
            aFile=fileList.item();
            fileHtml+="文件名:"+aFile.Name.substring(0,aFile.Name.lastIndexOf("."))+"<br/>"
            fileHtml+="文件属性:"+aFile.Attributes+"<br/>";
            fileHtml+="创建日期:"+aFile.DateCreated+"<br/>";
            fileHtml+="最后存取时间:"+aFile.DateLastAccessed+"<br/>";
            fileHtml+="最后修改时间:"+aFile.DateLastModified+"<br/>";
            fileHtml+="父目录:"+aFile.ParentFolder+"<br/>";
         fileHtml+="路径:"+aFile.Path+"<br/>";
         fileHtml+="短文件名:"+aFile.ShortName+"<br/>";
         fileHtml+="短路径:"+aFile.ShortPath+"<br/>";
         fileHtml+="大小:"+aFile.Size+"<br/>";
         fileHtml+="类型:"+aFile.Type +"<br/>";
         fileHtml+="所在盘:"+aFile.Drive+"<br/><hr>";
        
        }
    
    subFolderList = new Enumerator(currentFolder.SubFolders);
    
    for (; !subFolderList.atEnd(); subFolderList.moveNext())
        {
         countfolders++;
         fileHtml +="<h1>子文件夹:"+ subFolderList.item().Path+"</h1><br/><hr>";
         fileHtml=traverse(subFolderList.item().Path,fileHtml)//递归遍历子文件夹
        
        }
        
        //fileHtml+="共遍历文件数:"+countfiles+"<br/>"+"共遍历文件夹数:"+countfolders;
        return(fileHtml);
}

8 个解决方案

#1


就是点“选择文件夹”那个按钮时,跳出“没有权限”,本来是想打开一个浏览对话框的。

#2


把文件拓展名改为hta

#3


引用 2 楼 chrome_ 的回复:
把文件拓展名改为hta

  确实可以,十分感谢chrome_。不过由于我要跟其它的页面集成在一起。所以有没有其它的方法,可以解决这个问题??

#4


如果你自己使用就没有浏览器禁用了activex这种情况。
如果放到网上,那你还是打消念头吧

#5


引用 4 楼 kingwolf_javascript 的回复:
如果你自己使用就没有浏览器禁用了activex这种情况。
如果放到网上,那你还是打消念头吧

   这个是我们自己要用。显示没有权限跟activex没有关系吧,我专门启用了activex,后便哪个遍历的也要用到activex,那个就没问题。所以我觉得不是activex问题。有其他答案吗??

#6


该回复于2010-01-30 22:20:18被版主删除

#7


    我在网上查了一下,是Shell.BrowseForFolder的问题

提示没有权限的解决方法(winxp+IE6.0):
1、设置可信任站点(例如本地的可以为:http://localhost)
2、可信任站点安全级别自定义设置中:设置下面的选项
“对没有标记为安全的ActiveX控件进行初始化和脚本运行”----启用

但是在IE8下上边方法不起作用。各位有人知道原因吗?

#8


我下载了你的代码 在myeclipes6.5自带的浏览器中运行没有问题,在IE中运行,刚开始确实出现了你所说的没有权限那种情况,但是在internet选项中对active控件进行了一些设置以后,现在可以正常运行了.我就把那些ie不推荐的,不安全的项目全部都选择了启用,就好了.你可以试一试.我的电脑是windows7+ie8
另外你的代码对我现在正在做的一个小软件很有帮助,在此表示感谢.

#1


就是点“选择文件夹”那个按钮时,跳出“没有权限”,本来是想打开一个浏览对话框的。

#2


把文件拓展名改为hta

#3


引用 2 楼 chrome_ 的回复:
把文件拓展名改为hta

  确实可以,十分感谢chrome_。不过由于我要跟其它的页面集成在一起。所以有没有其它的方法,可以解决这个问题??

#4


如果你自己使用就没有浏览器禁用了activex这种情况。
如果放到网上,那你还是打消念头吧

#5


引用 4 楼 kingwolf_javascript 的回复:
如果你自己使用就没有浏览器禁用了activex这种情况。
如果放到网上,那你还是打消念头吧

   这个是我们自己要用。显示没有权限跟activex没有关系吧,我专门启用了activex,后便哪个遍历的也要用到activex,那个就没问题。所以我觉得不是activex问题。有其他答案吗??

#6


该回复于2010-01-30 22:20:18被版主删除

#7


    我在网上查了一下,是Shell.BrowseForFolder的问题

提示没有权限的解决方法(winxp+IE6.0):
1、设置可信任站点(例如本地的可以为:http://localhost)
2、可信任站点安全级别自定义设置中:设置下面的选项
“对没有标记为安全的ActiveX控件进行初始化和脚本运行”----启用

但是在IE8下上边方法不起作用。各位有人知道原因吗?

#8


我下载了你的代码 在myeclipes6.5自带的浏览器中运行没有问题,在IE中运行,刚开始确实出现了你所说的没有权限那种情况,但是在internet选项中对active控件进行了一些设置以后,现在可以正常运行了.我就把那些ie不推荐的,不安全的项目全部都选择了启用,就好了.你可以试一试.我的电脑是windows7+ie8
另外你的代码对我现在正在做的一个小软件很有帮助,在此表示感谢.