如何在Visual Studio Code中使用FileSystemProvider文件系统

3
我注意到了新的FileSystemProvider API,它看起来不错。但是似乎有一个期望,即插件能够处理使用此接口创建的任何自定义文件系统中的文件。
我尝试过使用Node内置的“fs”,但无法正常工作,因为Uri内的路径与主机上的文件系统无关,而是与在另一个扩展中定义的任意文件系统相关。
我还尝试了以下方法(使用了测试扩展memfs):
let uri = new vscode.Uri('memfs', '', fileName);
let fsp = new vscode.FileSystemProvider();
fsp.writeFile(uri)
    .then(() => {
        console.log('written file');
    });

但是似乎FileSystemProvider并没有按照我期望的方式进行暴露。

如果可能的话,插件如何利用并执行文件操作,以便于处理这些任意文件系统所拥有的自定义方案中的URI?


1
如果你不告诉我们关于这个“自定义文件系统”的任何信息,那就太模糊了。URI并不罕见,例如在Windows上,你可以使用“file://c:\foo\bar\baz.ext”来引用C盘上的文件。 - undefined
不太清楚你的意思,Hans。如果有帮助的话,我在谈论的是Visual Studio Code。https://code.visualstudio.com/docs/extensionAPI/vscode-api#FileSystemProvider https://code.visualstudio.com/docs/extensionAPI/vscode-api#Uri - undefined
1个回答

4
我遇到了同样的问题。原来FileSystemProvider是提供程序应该实现的接口。
微软在GitHub上提供了一个很好的样例,链接如下:https://github.com/Microsoft/vscode-extension-samples/tree/master/fsprovider-sample/src 核心内容如下:
首先,他们创建了一个新类叫做MemFS,它实现了vscode.FileSystemProvider接口。
然后像这样注册它:
const memFs = new MemFS();
context.subscriptions.push(
  vscode.workspace.registerFileSystemProvider('memfs', memFs, { 
    isCaseSensitive: true 
  }));
registerFileSystemProvider的第一个参数是方案(scheme),这意味着每当您使用以memfs://开头的URI时,将使用文件系统提供程序。
因此,您可以像平常一样使用fs,而方案确定实际使用的FileSystemProvider。这非常好,因为它使您无论操作的文件是在磁盘上,还是在世界另一端的某个服务器上,或者是由提供程序动态生成的都感觉不到差异。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接