首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VSCode:打开解密,保存加密

VSCode:打开解密,保存加密
EN

Stack Overflow用户
提问于 2020-10-21 05:38:38
回答 1查看 1.4K关注 0票数 0

我想打开的文件有一个简单的加密(它来自一个软件,但我有加密的许可)。如果我以纯文本的形式打开它,它就不是人类所能读的。为了简单起见,只需假设每一个字符都被移动了一点。

如果分机是对的,我想要改变它。

Openinig应该对文件进行解密,这样就可以编辑它了。关闭应该再次加密它,所以读取文件的程序能够这样做。

我将逻辑作为Notepad++插件运行,但我不知道如何在VSCode中实现它。

当前正在为解密文件设置语言服务器。这看起来挺好的。我可以在它的任何地方实现逻辑,而不会造成很大的性能损失?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-22 00:36:30

当文本编辑器更改为新打开的文件时,可以使用onDidOpenTextDocumentonDidChangeActiveTextEditor事件运行代码。然后在onDidChangeActiveTextEditor事件中,读取文档的内容,运行解密函数,然后使用TextEditor.edit函数将文本替换为解密文本。

若要在保存文件后加密,请使用onDidSaveTextDocument函数读取保存的文件,对内容进行加密,然后将加密的文本写入保存的文件。

代码语言:javascript
运行
复制
import * as vscode from 'vscode';
import * as path from 'path';
let steveChannel: vscode.OutputChannel | undefined;
let lastOpenFile = '' ;

// ----------------------------------- activate -----------------------------------
export function activate(context: vscode.ExtensionContext)
{
    steveChannel_writeLine(`activate`);

    vscode.window.onDidChangeActiveTextEditor((editor) =>
    {
        // text editor has been changed to a newly opened text file.
        if ( lastOpenFile == editor?.document.fileName )
        {
            let document = editor.document;
            const doc_text = editor.document.getText();
            const uc_text = doc_text.toUpperCase();

            // update contents of text editor to uppercase text.
            editor.edit(editBuilder =>
            {
                const range = doc_entireDocRange(document) ;
                editBuilder.replace( range, uc_text);
            });
        }
    });

    vscode.workspace.onDidOpenTextDocument((d) =>
    {
        const ext = path.extname(d.fileName) ;
        if ( ext == '.txt')
        {
            steveChannel_writeLine(`file opened ${d.fileName}`);

            // save name of most recently opened .txt file.
            // Use in change text editor event to detect when the text editor
            // contains the contents of a newly opened text file.
            lastOpenFile = d.fileName ;
        }
    });

    vscode.workspace.onDidSaveTextDocument((d) =>
    {
        const ext = path.extname(d.fileName);
        if (ext == '.txt')
        {
            steveChannel_writeLine(`file saved ${d.fileName}`);
        }
    });
}

// ---------------------------------- deactivate ----------------------------------
// this method is called when your extension is deactivated
export function deactivate() {}

// ---------------------------- steveChannel_writeLine ----------------------------
function steveChannel_writeLine(line: string)
{
    if (!steveChannel)
    {
        steveChannel = vscode.window.createOutputChannel('steve');
    }
    steveChannel.appendLine(line);
}

// ----------------------------- doc_entireDocRange -----------------------------
function doc_entireDocRange( doc: vscode.TextDocument )
{
    let invalidRange = new vscode.Range(0, 0, doc.lineCount /*intentionally missing the '-1' */, 0);
    let docRange = doc.validateRange(invalidRange);
    return docRange ;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64457293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档