基于目录树中可用的文件生成带有链接的html页面

Generating html-page with links basing on files available in directory tree

本文关键字:链接 页面 html 文件 目录树      更新时间:2023-09-26

我想根据文件的文件名,使用浏览目录树收集的信息来生成本地html页面内容。我对javascript没有任何经验,我想这将是最容易完成任务的。该页面必须正确使用IE7。现在,让我举一个我想做什么的例子。

html文件位于本地目录中,例如HTML_DIR。有几个子目录,比如HTML_DIR'AHTML_DIR'BHTML_DIR'C,其中包含名为XXX_001-999.xmlYYY_001-999.xmlZZZ_001-999.xml的xml文件,而每种类型都可以在每个子目录中找到。因此,一个示例场景是:

HTML_DIR
/A
  - XXX_001.xml
  - XXX_002.xml
  - XXX_003.xml
  - YYY_001.xml
  - YYY_002.xml
  - YYY_003.xml
/B
  - ZZZ_001.xml
  - ZZZ_002.xml
  - ZZZ_003.xml
  - ZZZ_111.xml
  - XXX_111.xml
/C
  - YYY_001.xml
  - YYY_002.xml
  - YYY_003.xml
  - ZZZ_111.xml
  - XXX_111.xml

现在,我想在html页面上为每个子目录动态生成表,其中的行取决于包含的文件,因此页面看起来像:

Table A
XXX    YYY    ZZZ    Link
001    001           http://localhost:8080/001.html
002    002           http://localhost:8080/002.html
003    003           http://localhost:8080/003.html
Table B
XXX    YYY    ZZZ    Link
              001    http://localhost:8080/001.html
              002    http://localhost:8080/002.html
              003    http://localhost:8080/003.html
111           111    http://localhost:8080/111.html
Table C
XXX    YYY    ZZZ    Link
       001           http://localhost:8080/001.html
       002           http://localhost:8080/002.html
       003           http://localhost:8080/003.html
111           111    http://localhost:8080/111.html

这可行吗?

使用javascript读取服务器的文件系统是不可能的,javascript是在客户端上执行的。必须使用服务器端语言(如php或java)才能做到这一点。

这里有一个简单的片段,用于读取给定文件夹中的所有文件和文件夹,但我不确定您是否可以使用它读取虚拟文件夹。

window.onload = function () {
    var topRoot = 'YOUR_TOP_FOLDER_PATH', // Like 'C:/xmls'   
        fso = new ActiveXObject('Scripting.FileSystemObject'),
        getFolderTree = function (path) {
            var allfiles = [],
                getTree = function (subfolders) {
                    var subs, files;
                    while (!subfolders.atEnd()) {
                        subs = subfolders.item().SubFolders;
                        if (subs) {
                            getTree(new Enumerator(subs));
                        }
                        files = new Enumerator(subfolders.item().files);
                        while (!files.atEnd()) {
                            // Add a file filter here
                            allfiles.push(new String(files.item()));
                            files.moveNext();
                        }
                        subfolders.moveNext();
                    }
                };
            getTree(new Enumerator(fso.GetFolder(path).SubFolders));
            return allfiles;
        },
        tree = getFolderTree(topRoot),
        dir = document.getElementById('dir'),
        n = 0;
    tree.sort();
    // This is just an example print
    for (; n < tree.length; n++) {
        dir.innerHTML += tree[n] + '<br>';
    }
    return;
}

只需将此功能安装到您自己的架构中,并添加topRoot、文件过滤器和打印布局即可。

请注意,topRoot应该是一个子文件夹(即不要使用topRoot = 'C:';),读取系统中的所有文件将花费大量时间。