我正在尝试在 Visual Studio 代码扩展中获取项目文件夹路径,但很难找到答案。我的代码不起作用。我不知道这可能或不可能。我查了一下谷歌没有人回答这个问题。有知道这方面的朋友请帮我解答一下吗
扩展.js:
var vscode = require("vscode");
var path = require("path");
exports.activate = context => {
const findPath =
vscode.commands.registerCommand('extension.search', () => {
let findprojectfolderPath = vscode.workspace.uri.fsPath; // Not working
console.log(findprojectfolderPath);
});
}
我想更新 Pushprajsinh Chudasama 的答案,因为
vscode.workspace.rootPath
现在已已弃用。它被 vscode.workspace.workspaceFolders
取代,它返回 WorkspaceFolders | undefined
数组。要检索所有工作区文件夹的路径,您现在可以使用:
vscode.workspace.workspaceFolders?.map(folder => folder.uri.path)
如果打开文件夹,则可以获得
workspace
变量。
let folderName = vscode.workspace.name; // get the open folder name
let folderPath = vscode.workspace.rootPath; // get the open folder path
如果你想找到用户当前打开的文件的路径,那么你需要这个
console.log(vscode.window.activeTextEditor.document.uri.fsPath);
阅读此文档以获取更多信息:https://code.visualstudio.com/api/references/vscode-api#TextDocument
此函数获取当前打开的文件的工作区目录。如果没有活动编辑器或文件不属于工作区,则返回
undefined
。
import * as vscode from "vscode";
function getDocumentWorkspaceFolder(): string | undefined {
const fileName = vscode.window.activeTextEditor?.document.fileName;
return vscode.workspace.workspaceFolders
?.map((folder) => folder.uri.fsPath)
.filter((fsPath) => fileName?.startsWith(fsPath))[0];
}
您必须更改代码。就像下面的例子。
vscode.commands.registerCommand('extension.search', (p: { fsPath: string }) => {
// p is an object whose path is fsPath.
console.log(p.fsPath);
});
const folderPath = vscode.workspace.workspaceFolders[0].uri
.toString()
.split(':///')[1].replace('%3A', ':');
我就是这样做的,而且效果很好。 请注意,单元 (C) 未被替换。只是“%3A”对应的字符“:”。