v2-refactor-temp/docs/file-manager/file-management.md
本文档描述 Cherry Studio 现有版本的文件管理机制,覆盖主进程文件存储、渲染进程文件引用、IPC 接口与 UI 行为。
FileMetadata 作为业务载体,元信息与引用计数存于 Dexie (db.files)。db.files 数据,count 用于引用计数显示与删除策略。getFilesDir() 计算,主进程写入。getNotesDir() 计算。getTempDir() 计算。主进程初始化这些目录:src/main/services/FileStorage.ts。
FileMetadata(src/renderer/types/file.ts)核心字段:
id: 文件 ID(UUID)name: 存储文件名(通常是 uuid + ext)origin_name: 原始文件名(用于展示与重命名)path: 原始路径或构造路径size: 文件大小ext: 扩展名(包含点)type: 文件类型(image/document/text/...)created_at: 创建时间count: 引用计数Dexie 表定义:src/renderer/databases/index.ts,files 表包含上述字段与索引。
文件存储与处理:src/main/services/FileStorage.ts。
主要能力:
fs.createReadStream)。FileMetadata,并在渲染进程侧增加 count。文件引用与计数:src/renderer/services/FileManager.ts。
核心行为:
uploadFile(s): 调用 IPC 上传,若已有记录则 count + 1。addFile(s): 直接写入 db.files,已有则 count + 1。deleteFile: 当 count > 1 时仅减计数,不删物理文件;否则删除 db.files 并调用主进程删除。getFilePath / getFileUrl: 基于 app.path.files 构造路径或 file:// URL。formatFileName: 使用 origin_name 进行展示处理。注册位置:src/main/ipc.ts;预加载暴露:src/preload/preload.ts(window.api.file)。
常用接口示例:
File_Select / File_Open / File_SaveFile_Upload / File_Delete / File_Move / File_RenameFile_Read / File_ReadExternalFile_Base64Image / File_Base64File / File_BinaryImageFile_ListDirectory / File_GetDirectoryStructureFile_StartWatcher / File_StopWatchersrc/renderer/pages/files/FilesPage.tsx、FileList.tsx
db.files,按类型/时间/大小/名称排序。count(引用次数)。FileManager.addFiles 或 uploadFiles 写入 db.files。count 是文件被引用的次数,用于:
count > 1 时仅减计数,不删除物理文件。DexieMessageDataSource.updateFileCount 会更新计数并在归零时删除。origin_name 被覆盖或共享。name 与实际存储文件名绑定,用于定位文件;origin_name 仅用于展示与重命名。md/markdown/txt)。src/main/services/FileStorage.tssrc/main/ipc.tssrc/preload/preload.tssrc/renderer/services/FileManager.tssrc/renderer/databases/index.tssrc/renderer/pages/files/FilesPage.tsx