Visual Studio 代码扩展名 API 应该用于在 Visual Studio 代码工作区中添加文件夹和移动文件?

What Visual Studio Code extension API should be used to add folders and move files in a Visual Studio Code workspace?

我想编写一个扩展程序:

所以我需要 API 来完成上述操作。我不清楚是否应该使用

我阅读了答案 ,但它没有说明在工作区内使用什么创建文件夹和移动文件。

我发现 extension.ts, sample code 用于实施 Microsoft 提供的 FileSystemProvider
提供的以下步骤可帮助您了解如何创建新文件夹 (createDirectory) 以及如何在工作区内移动文件(使用 copy 命令,将旧文件夹中的所有文件复制到新文件夹并如果您不希望文件保留在旧文件夹中,请使用 delete 命令。

  1. FileSystemProvider 中的第一步是使用 registerFileSystemProvider:
  2. 为给定方案注册文件系统提供程序
     const memFs = new MemFS();

     context.subscriptions.push(
              vscode.workspace.registerFileSystemProvider('memfs', memFs, {
                    isCaseSensitive: true
        }));

  1. 接下来是 注册命令 registerCommand 以在 FileSystemProvider 中执行您的操作,例如 readDirectoryreadFilecreateDirectory , copy, delete.
context.subscriptions.push(
              vscode.commands.registerCommand('memfs.init', _ =>
             {
               #TODO: add required functionalities

          }));
  • 读取文件夹和读取文件
      for (const [name] of memFs.readDirectory(vscode.Uri.parse('memfs:/'))) {
                    memFs.readFile(vscode.Uri.parse(`memfs:/${name}`));
                }
  • 新建文件夹
memFs.createDirectory(vscode.Uri.parse(`memfs:/folder/`));

  • 将文件移动到新创建的文件夹。不幸的是似乎没有单独的移动文件命令,但是您可以使用复制命令复制到新文件夹然后删除:

    复制 copy(source: Uri, destination: Uri, options: {overwrite: boolean})

    删除

     context.subscriptions.push(vscode.commands.registerCommand('memfs.reset', _ => {
               for (const [name] of memFs.readDirectory(vscode.Uri.parse('memfs:/'))) {
                    memFs.delete(vscode.Uri.parse(`memfs:/${name}`));
               }

            }));

如果您想从非本地存储(如 FTP 站点或远程设备内的虚拟文件系统提供文件并将它们呈现给 Visual Studio 代码,则可以使用 FileSystemProvider作为存储目录。 FileSystemProvider 是一个 view/controller 的远程存储。换句话说,您必须通过与远程存储通信来实现所有文件操作操作。

如果您只想操作当前工作区中的文件并且还能够使用来自 FileSystemProvider 的 URI,请使用 vscode.workspace.fs.

您也可以使用 Node.js fs 模块,但它只能处理本地磁盘工作区(URI 的方案 file:)。我建议使用 synchronous 版本的 fs 方法。我在 Visual Studio 代码中使用异步 fs 方法时遇到了一些麻烦(当时我不知道 vscode.workspace.fs)。