【问题标题】:How do I count files in a folder in a vscode extension?如何计算 vscode 扩展中文件夹中的文件数?
【发布时间】:2020-10-25 11:24:44
【问题描述】:

如何在 vscode 扩展中计算文件夹中的文件并从资源管理器的上下文菜单中执行?

【问题讨论】:

    标签: typescript vscode-extensions


    【解决方案1】:

    import * as vscode from 'vscode';
    const fs = require('fs');
    
    export function walk(dir: string) {
        // https://stackoverflow.com/questions/5827612/node-js-fs-readdir-recursive-directory-search
        // by Victor Powell: https://stackoverflow.com/users/786374/victor-powell
        var results: string[] = [];
        var list = fs.readdirSync(dir);
        list.forEach(function(file: string) {
            file = dir + '/' + file;
            var stat = fs.statSync(file);
            if (stat && stat.isDirectory()) { 
                // fecurse into a subdirectory
                results = results.concat(walk(file));
            } else { 
                // is a file
                results.push(file);
            }
        });
        return results;
    };
    
    export function activate(context: vscode.ExtensionContext) {
    
        let disposable = vscode.commands.registerCommand('MMA.countFiles', async (e) => {
            // The code you place here will be executed every time your command is executed
            let files = walk(e.path);
            vscode.window.showInformationMessage(`${files.length} files in ${e.path}`);
    
        });
    
        context.subscriptions.push(disposable);
    }
    
    export function deactivate() {}

    ...这是 package.json 中的重要部分:

    "contributes": {
        "commands": [
            {
                "command": "MMA.countFiles",
                "title": "_count.Files"
            }
        ],
        "menus": {
            "explorer/context": [
                {
                    "when": "explorerResourceIsFolder",
                    "command": "MMA.countFiles",
                    "group": "navigation@98"
                }
            ]
        }   
    },
    

    【讨论】:

      【解决方案2】:

      我认为你可以很容易地用glob 做到这一点。例如

      const glob = require('glob');
      
      const files = glob.sync('./js/**/*.*', {'nodir': true}); // returns an array of files
      
      console.log(files);
      console.log(files.length);
      

      其中./js 是递归计数文件的文件夹。如果您有 .files(点文件)需要考虑,还有一个 dot 选项。

      递归、不计算文件夹和构建数组都在一行代码中为您处理。

      【讨论】:

      • 谢谢 - 我在gulp 中经常使用它。
      猜你喜欢
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 2013-09-16
      • 2016-02-25
      • 1970-01-01
      相关资源
      最近更新 更多