improve:墨迹保存

This commit is contained in:
CJK_mkp
2025-06-09 08:41:23 +08:00
parent 11369aedf8
commit 4b4aaae001
3 changed files with 38 additions and 48 deletions
+25 -20
View File
@@ -1,4 +1,4 @@
using Ink_Canvas.Helpers;
using Ink_Canvas.Helpers;
using iNKORE.UI.WPF.Modern;
using Microsoft.Office.Core;
using Microsoft.Office.Interop.PowerPoint;
@@ -592,6 +592,13 @@ namespace Ink_Canvas {
private async void PptApplication_SlideShowBegin(SlideShowWindow Wn) {
try {
// 修改加载路径到软件根目录下的Saves文件夹
var folderPath = Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
"Saves",
@"Auto Saved - Presentations\" + Wn.Presentation.Name + "_" + Wn.Presentation.Slides.Count
);
if (Settings.Automation.IsAutoFoldInPPTSlideShow && !isFloatingBarFolded)
await FoldFloatingBar(new object());
else if (isFloatingBarFolded) await UnFoldFloatingBar(new object());
@@ -630,13 +637,9 @@ namespace Ink_Canvas {
//检查是否有已有墨迹,并加载
if (Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint)
if (Directory.Exists(Settings.Automation.AutoSavedStrokesLocation +
@"\Auto Saved - Presentations\" + Wn.Presentation.Name + "_" +
Wn.Presentation.Slides.Count)) {
if (Directory.Exists(folderPath)) {
LogHelper.WriteLogToFile("Found saved strokes", LogHelper.LogType.Trace);
var files = new DirectoryInfo(Settings.Automation.AutoSavedStrokesLocation +
@"\Auto Saved - Presentations\" + Wn.Presentation.Name + "_" +
Wn.Presentation.Slides.Count).GetFiles();
var files = new DirectoryInfo(folderPath).GetFiles();
var count = 0;
foreach (var file in files)
if (file.Name != "Position") {
@@ -718,9 +721,16 @@ namespace Ink_Canvas {
isEnteredSlideShowEndEvent = true;
if (Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint) {
var folderPath = Settings.Automation.AutoSavedStrokesLocation + @"\Auto Saved - Presentations\" +
Pres.Name + "_" + Pres.Slides.Count;
// 修改保存路径到软件根目录下的Saves文件夹
var folderPath = Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
"Saves",
@"Auto Saved - Presentations\" + Pres.Name + "_" + Pres.Slides.Count
);
// 确保目录存在
if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath);
try {
File.WriteAllText(folderPath + "/Position", previousSlideID.ToString());
}
@@ -735,21 +745,16 @@ namespace Ink_Canvas {
var srcBuf = new byte[memoryStreams[i].Length];
memoryStreams[i].Position = 0;
var byteLength = memoryStreams[i].Read(srcBuf, 0, srcBuf.Length);
File.WriteAllBytes(folderPath + @"\" + i.ToString("0000") + ".icstk", srcBuf);
LogHelper.WriteLogToFile(string.Format(
"Saved strokes for Slide {0}, size={1}, byteLength={2}", i.ToString(),
memoryStreams[i].Length, byteLength));
// 使用Path.Combine构建文件路径
File.WriteAllBytes(Path.Combine(folderPath, i.ToString("0000") + ".icstk"), srcBuf);
} else {
if (File.Exists(folderPath + @"\" + i.ToString("0000") + ".icstk"))
File.Delete(folderPath + @"\" + i.ToString("0000") + ".icstk");
var filePath = Path.Combine(folderPath, i.ToString("0000") + ".icstk");
if (File.Exists(filePath)) File.Delete(filePath);
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile(
$"Failed to save strokes for Slide {i}\n{ex.ToString()}",
LogHelper.LogType.Error);
if (File.Exists(folderPath + @"\" + i.ToString("0000") + ".icstk"))
File.Delete(folderPath + @"\" + i.ToString("0000") + ".icstk");
// 新增错误处理逻辑
LogHelper.WriteLogToFile($"保存第{i}页墨迹失败: {ex.Message}", LogHelper.LogType.Error);
}
}
+10 -18
View File
@@ -36,35 +36,28 @@ namespace Ink_Canvas {
if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);
string savePathWithName;
if (currentMode != 0) // 黑板模式下
savePathWithName = savePath + @"\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff") + " Page-" +
CurrentWhiteboardIndex + " StrokesCount-" + inkCanvas.Strokes.Count + ".icstk";
savePathWithName = savePath + @"\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff") + " Page-" +
CurrentWhiteboardIndex + " StrokesCount-" + inkCanvas.Strokes.Count + ".icstk";
else
//savePathWithName = savePath + @"\" + DateTime.Now.ToString("u").Replace(':', '-') + ".icstk";
savePathWithName = savePath + @"\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff") + ".icstk";
try {
using (FileStream fs = new FileStream(savePathWithName, FileMode.Create)) { // 修复未定义的filePath引用
using (FileStream fs = new FileStream(savePathWithName, FileMode.Create)) {
inkCanvas.Strokes.Save(fs);
}
}
catch (Exception ex) when (ex is UnauthorizedAccessException || ex is DirectoryNotFoundException) {
var docPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
"Auto Saved - Annotation Strokes",
DateTime.Now.ToString("yyyyMMdd"),
Path.GetFileNameWithoutExtension(savePathWithName) + "_retry.icstk"); // 使用正确的原始文件名
// 修改异常处理中的备用路径为软件根目录下的Saves文件夹
string fallbackPath = Path.Combine(appDirectory, "Saves");
Directory.CreateDirectory(fallbackPath);
string fileName = Path.GetFileNameWithoutExtension(savePathWithName) + "_retry.icstk";
string newPath = Path.Combine(fallbackPath, fileName);
try {
// 修改保存路径为软件所在目录下的 Saves 文件夹
string saveDirectory = Path.Combine(appDirectory, "Saves");
Directory.CreateDirectory(saveDirectory); // 自动创建 Saves 目录
string fileName = Path.GetFileNameWithoutExtension(savePathWithName) + "_retry.icstk"; // 使用正确的原始文件名
string newPath = Path.Combine(saveDirectory, fileName); // 新路径组合
using (FileStream fs = new FileStream(newPath, FileMode.Create)) {
inkCanvas.Strokes.Save(fs);
savePathWithName = newPath; // 更新通知使用的路径变量
savePathWithName = newPath;
}
}
catch (Exception fallbackEx) {
@@ -91,7 +84,6 @@ namespace Ink_Canvas {
AnimationsHelper.HideWithSlideAndFade(BoardBorderTools);
var openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = Settings.Automation.AutoSavedStrokesLocation;
openFileDialog.Title = "打开墨迹文件";
openFileDialog.Filter = "Ink Canvas Strokes File (*.icstk)|*.icstk";
if (openFileDialog.ShowDialog() != true) return;
+3 -10
View File
@@ -84,16 +84,9 @@ namespace Ink_Canvas {
// 获取日期文件夹路径
private string GetDateFolderPath(string fileName) {
if (string.IsNullOrWhiteSpace(fileName)) {
fileName = DateTime.Now.ToString("HH-mm-ss");
}
var basePath = Settings.Automation.AutoSavedStrokesLocation;
var basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Saves");
var dateFolder = DateTime.Now.ToString("yyyyMMdd");
var fullPath = Path.Combine(
basePath,
"Auto Saved - Screenshots",
dateFolder);
var fullPath = Path.Combine(basePath, "Auto Saved - Screenshots", dateFolder);
try {
if (!Directory.Exists(fullPath)) {
@@ -115,7 +108,7 @@ namespace Ink_Canvas {
}
private string GetDefaultFolderPath() {
var basePath = Settings.Automation.AutoSavedStrokesLocation;
var basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Saves");
var screenshotsFolder = Path.Combine(basePath, "Auto Saved - Screenshots");
try {