如何检查文档是否为只读状态——VSCode扩展API
判断VS Code活动文本文档是否只读的方法
嘿,我刚好踩过这个坑!其实VS Code的API里是有现成方法的,可能你在文档里没留意到TextDocument对象上的关键属性~
核心方法:使用isReadOnly属性
你可以直接通过活动编辑器的文档实例来判断,这个属性会兼顾两种只读场景:文件系统层面的只读权限,以及VS Code内部标记的只读状态(比如右键菜单设置的“设为只读”)。
示例代码:
import * as vscode from 'vscode'; // 获取当前活动的文本文档 const activeDocument = vscode.window.activeTextEditor?.document; if (activeDocument) { if (activeDocument.isReadOnly) { console.log("当前文档处于只读状态"); } else { console.log("当前文档可编辑"); } }
进阶:区分文件系统只读和编辑器内部只读
如果需要更细致地判断只读原因(比如是文件本身权限问题,还是编辑器设置的),可以通过文件系统API去检查文件的原生属性:
async function checkFileSystemReadOnlyStatus(doc: vscode.TextDocument): Promise<boolean> { // 只处理本地文件(排除远程、虚拟文档等) if (doc.uri.scheme !== 'file') { return false; } try { const fileStat = await vscode.workspace.fs.stat(doc.uri); // 检查文件的只读标记 return !!(fileStat.type & vscode.FileType.Readonly); } catch (error) { console.error("获取文件状态失败:", error); return false; } } // 使用示例 const activeDoc = vscode.window.activeTextEditor?.document; if (activeDoc) { checkFileSystemReadOnlyStatus(activeDoc).then(isFsReadOnly => { if (activeDoc.isReadOnly) { if (isFsReadOnly) { console.log("文档因文件系统权限只读"); } else { console.log("文档因VS Code内部设置只读"); } } }); }
简单总结一下:日常判断用isReadOnly就足够覆盖绝大多数场景,特殊需求再结合文件系统API做区分~
内容的提问来源于stack exchange,提问作者GorvGoyl
相关产品推荐
相关产品推荐

