VS Code存储打开文件列表的位置?

ska*_*rus 20 visual-studio-code

我正在尝试在工作和家中同步VS Code实例,包括打开文件列表.我知道有同步设置的扩展,但它们不包括Open Files AFAIK.我不希望在运行实例下进行实时同步,但如果我重新启动两台机器并在它们上启动Code,我希望它们完全相同.

目前,我在OneDrive上有一个便携式安装代码,我也尝试将AppData\Roaming\Code移动到OneDrive,用这个副本的符号链接替换实际目录.

但是,当我在家里打开编辑器时,它有自己的一组打开文件.

我尝试使用ProcMon来了解它的来源,我试着稍微阅读一下.似乎要求可能更容易:-)

顺便说一句,我在我项目的Code git文件夹中打开.此文件夹位于两台PC上的相同路径中.

小智 14

我很确定你是有AppData\Roaming\Code问题的位置是对的.特别:

  • AppData\Roaming\Code\storage.json在该windowsState部分.
  • AppData\Roaming\Code\Backups\workspaces.json

storage.json退出代码(文件>退出)之前,这些文件(或至少)不会更新.如果您在工作机器上打开代码并且在到达家用机器时没有看到更改,那么这可能就是您没有看到预期的原因.

Code/Atom还在sqlite3数据库中存储状态信息,并在那里存储了大量状态信息:

  • AppData\Roaming\Code\Local Storage\file__0.localstorage

使用SQLite浏览器工具(如http://sqlitebrowser.org/)将其打开.您将在表格中看到许多熟悉的路径引用ItemTable.该列value显示为"BLOB"(二进制),但您可以单击任何行并将数据导出到文件.这样做并在文本编辑器中打开它(例如Code!:)),你会发现它只是一个JSON字符串.

(由于VS Code基于GitHub的Atom编辑器,使用"Atom"而不是"Code"搜索问题通常会挖掘您可能无法找到的信息.)


kin*_*ase 5

我完全同意@Jonathan 并想补充一点。

对于这个问题,打开的文件存储在file__0.localstorage一个sqlite文件中。我只是写了一些代码来提取打开的文件列表。希望能帮助到你。

import sqlite3
import pandas as pd
import json

fn = r"C:\Users\HelloWorld\AppData\Roaming\Code\Local Storage\file__0.localstorage"
conn = sqlite3.connect(fn)
df = pd.read_sql("select key, value as _value from ItemTable", conn)
df["v"] = df.pop("_value").map(lambda x: x.decode("utf-16"))

# should be choosen carefully
known_file_opened = "numpy"
known_file_closed = "aws"

df_check = df[
    df.v.str.contains(known_file_opened)
    &(~df.v.str.contains(known_file_closed))
]
assert len(df_check) == 1

js = json.loads(df_check.v.iloc[0])
editors = js["groups"][0]["editors"]
print("Found %d editors" %(len(editors)))

paths = []
for editor in editors:
    js_ = json.loads(editor["value"])
    path = js_["resourceJSON"]["fsPath"]
    paths.append(path)

print("Found opened file list:\n%s" %(paths))
Run Code Online (Sandbox Code Playgroud)