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 来完成上述操作。我不清楚是否应该使用
- 标准
fs
节点模块,
- File System Provider 或
workspace
命名空间。
我阅读了答案 ,但它没有说明在工作区内使用什么创建文件夹和移动文件。
我发现 extension.ts, sample code 用于实施 Microsoft 提供的 FileSystemProvider
。
提供的以下步骤可帮助您了解如何创建新文件夹 (createDirectory
) 以及如何在工作区内移动文件(使用 copy
命令,将旧文件夹中的所有文件复制到新文件夹并如果您不希望文件保留在旧文件夹中,请使用 delete
命令。
FileSystemProvider
中的第一步是使用 registerFileSystemProvider
: 为给定方案注册文件系统提供程序
const memFs = new MemFS();
context.subscriptions.push(
vscode.workspace.registerFileSystemProvider('memfs', memFs, {
isCaseSensitive: true
}));
- 接下来是 注册命令
registerCommand
以在 FileSystemProvider 中执行您的操作,例如 readDirectory
、readFile
、createDirectory
, 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
)。
我想编写一个扩展程序:
- 读取当前工作区的文件夹和文件
- 通过创建新文件夹并将文件移入其中来重新组织这些文件
所以我需要 API 来完成上述操作。我不清楚是否应该使用
- 标准
fs
节点模块, - File System Provider 或
workspace
命名空间。
我阅读了答案
我发现 extension.ts, sample code 用于实施 Microsoft 提供的 FileSystemProvider
。
提供的以下步骤可帮助您了解如何创建新文件夹 (createDirectory
) 以及如何在工作区内移动文件(使用 copy
命令,将旧文件夹中的所有文件复制到新文件夹并如果您不希望文件保留在旧文件夹中,请使用 delete
命令。
FileSystemProvider
中的第一步是使用registerFileSystemProvider
: 为给定方案注册文件系统提供程序
const memFs = new MemFS();
context.subscriptions.push(
vscode.workspace.registerFileSystemProvider('memfs', memFs, {
isCaseSensitive: true
}));
- 接下来是 注册命令
registerCommand
以在 FileSystemProvider 中执行您的操作,例如readDirectory
、readFile
、createDirectory
,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
)。