diff --git a/apps/ai-game-creator-shell/src-tauri/src/export/registry.rs b/apps/ai-game-creator-shell/src-tauri/src/export/registry.rs index 656f22d8b..cbf66fa52 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/export/registry.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/export/registry.rs @@ -133,7 +133,12 @@ fn write_atomically(path: &Path, text: &str) -> Result<(), RegistryError> { })?; let temp = temp_path(path); let write = || -> std::io::Result<()> { - let mut file = fs::File::create(&temp)?; + // `create_new`(O_EXCL)不跟随已存在的路径:项目里预先摆好的同名符号链接或残留文件会让 + // 这次写入直接失败,而不是把链接指向的文件截断成注册表内容。 + let mut file = fs::OpenOptions::new() + .write(true) + .create_new(true) + .open(&temp)?; file.write_all(text.as_bytes())?; // 替换前落盘:只 flush 的话,崩溃窗口里换过去的可能是还没写完的内容。 file.sync_all()