From 4345885cc9290c89282149d7cf5095d47a485ca2 Mon Sep 17 00:00:00 2001 From: Perfare Date: Wed, 30 Jun 2021 22:41:16 +0800 Subject: [PATCH] remember the last opened path, close #646 --- AssetStudioGUI/AssetStudioGUIForm.cs | 27 +++++++++++++++---- AssetStudioGUI/Components/OpenFolderDialog.cs | 8 +++--- AssetStudioGUI/Studio.cs | 4 +-- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/AssetStudioGUI/AssetStudioGUIForm.cs b/AssetStudioGUI/AssetStudioGUIForm.cs index 4011622..dd02d76 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.cs @@ -82,6 +82,9 @@ namespace AssetStudioGUI private int nextGObject; private List treeSrcResults = new List(); + private string openDirectoryBackup = string.Empty; + private string saveDirectoryBackup = string.Empty; + [DllImport("gdi32.dll")] private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, IntPtr pdv, [In] ref uint pcFonts); @@ -131,9 +134,11 @@ namespace AssetStudioGUI private async void loadFile_Click(object sender, EventArgs e) { + openFileDialog1.InitialDirectory = openDirectoryBackup; if (openFileDialog1.ShowDialog() == DialogResult.OK) { ResetForm(); + openDirectoryBackup = Path.GetDirectoryName(openFileDialog1.FileNames[0]); assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text; await Task.Run(() => assetsManager.LoadFiles(openFileDialog1.FileNames)); BuildAssetStructures(); @@ -143,9 +148,11 @@ namespace AssetStudioGUI private async void loadFolder_Click(object sender, EventArgs e) { var openFolderDialog = new OpenFolderDialog(); + openFolderDialog.InitialFolder = openDirectoryBackup; if (openFolderDialog.ShowDialog(this) == DialogResult.OK) { ResetForm(); + openDirectoryBackup = openFolderDialog.Folder; assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text; await Task.Run(() => assetsManager.LoadFolder(openFolderDialog.Folder)); BuildAssetStructures(); @@ -352,7 +359,7 @@ namespace AssetStudioGUI var versionPath = Path.Combine(savePath, item.Group.Header); Directory.CreateDirectory(versionPath); - var saveFile = $"{versionPath}\\{item.SubItems[1].Text} {item.Text}.txt"; + var saveFile = $"{versionPath}{Path.DirectorySeparatorChar}{item.SubItems[1].Text} {item.Text}.txt"; File.WriteAllText(saveFile, item.ToString()); Progress.Report(++i, count); @@ -1308,9 +1315,11 @@ namespace AssetStudioGUI if (animator != null) { var saveFolderDialog = new OpenFolderDialog(); + saveFolderDialog.InitialFolder = saveDirectoryBackup; if (saveFolderDialog.ShowDialog(this) == DialogResult.OK) { - var exportPath = saveFolderDialog.Folder + "\\Animator\\"; + saveDirectoryBackup = saveFolderDialog.Folder; + var exportPath = Path.Combine(saveFolderDialog.Folder, "Animator") + Path.DirectorySeparatorChar; ExportAnimatorWithAnimationClip(animator, animationList, exportPath); } } @@ -1331,9 +1340,11 @@ namespace AssetStudioGUI if (sceneTreeView.Nodes.Count > 0) { var saveFolderDialog = new OpenFolderDialog(); + saveFolderDialog.InitialFolder = saveDirectoryBackup; if (saveFolderDialog.ShowDialog(this) == DialogResult.OK) { - var exportPath = saveFolderDialog.Folder + "\\GameObject\\"; + saveDirectoryBackup = saveFolderDialog.Folder; + var exportPath = Path.Combine(saveFolderDialog.Folder, "GameObject") + Path.DirectorySeparatorChar; List animationList = null; if (animation) { @@ -1372,8 +1383,10 @@ namespace AssetStudioGUI saveFileDialog.FileName = gameObjects[0].m_Name + " (merge).fbx"; saveFileDialog.AddExtension = false; saveFileDialog.Filter = "Fbx file (*.fbx)|*.fbx"; + saveFileDialog.InitialDirectory = saveDirectoryBackup; if (saveFileDialog.ShowDialog() == DialogResult.OK) { + saveDirectoryBackup = Path.GetDirectoryName(saveFileDialog.FileName); var exportPath = saveFileDialog.FileName; List animationList = null; if (animation) @@ -1464,8 +1477,10 @@ namespace AssetStudioGUI if (sceneTreeView.Nodes.Count > 0) { var saveFolderDialog = new OpenFolderDialog(); + saveFolderDialog.InitialFolder = saveDirectoryBackup; if (saveFolderDialog.ShowDialog(this) == DialogResult.OK) { + saveDirectoryBackup = saveFolderDialog.Folder; var savePath = saveFolderDialog.Folder + Path.DirectorySeparatorChar; ExportSplitObjects(savePath, sceneTreeView.Nodes); } @@ -1524,10 +1539,11 @@ namespace AssetStudioGUI if (exportableAssets.Count > 0) { var saveFolderDialog = new OpenFolderDialog(); + saveFolderDialog.InitialFolder = saveDirectoryBackup; if (saveFolderDialog.ShowDialog(this) == DialogResult.OK) { timer.Stop(); - + saveDirectoryBackup = saveFolderDialog.Folder; List toExportAssets = null; switch (type) { @@ -1557,10 +1573,11 @@ namespace AssetStudioGUI if (exportableAssets.Count > 0) { var saveFolderDialog = new OpenFolderDialog(); + saveFolderDialog.InitialFolder = saveDirectoryBackup; if (saveFolderDialog.ShowDialog(this) == DialogResult.OK) { timer.Stop(); - + saveDirectoryBackup = saveFolderDialog.Folder; List toExportAssets = null; switch (type) { diff --git a/AssetStudioGUI/Components/OpenFolderDialog.cs b/AssetStudioGUI/Components/OpenFolderDialog.cs index d832f01..3ffab13 100644 --- a/AssetStudioGUI/Components/OpenFolderDialog.cs +++ b/AssetStudioGUI/Components/OpenFolderDialog.cs @@ -29,9 +29,11 @@ namespace AssetStudioGUI frm.GetOptions(out var options); options |= NativeMethods.FOS_PICKFOLDERS | NativeMethods.FOS_FORCEFILESYSTEM | NativeMethods.FOS_NOVALIDATE | NativeMethods.FOS_NOTESTFILECREATE | NativeMethods.FOS_DONTADDTORECENT; frm.SetOptions(options); - if (Title != null) + if (!string.IsNullOrEmpty(Title)) + { frm.SetTitle(Title); - if (InitialFolder != null) + } + if (!string.IsNullOrEmpty(InitialFolder)) { var riid = new Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"); //IShellItem if (NativeMethods.SHCreateItemFromParsingName(InitialFolder, IntPtr.Zero, ref riid, out var directoryShellItem) == NativeMethods.S_OK) @@ -39,7 +41,7 @@ namespace AssetStudioGUI frm.SetFolder(directoryShellItem); } } - if (DefaultFolder != null) + if (!string.IsNullOrEmpty(DefaultFolder)) { var riid = new Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"); //IShellItem if (NativeMethods.SHCreateItemFromParsingName(DefaultFolder, IntPtr.Zero, ref riid, out var directoryShellItem) == NativeMethods.S_OK) diff --git a/AssetStudioGUI/Studio.cs b/AssetStudioGUI/Studio.cs index da208f2..2651590 100644 --- a/AssetStudioGUI/Studio.cs +++ b/AssetStudioGUI/Studio.cs @@ -531,13 +531,13 @@ namespace AssetStudioGUI //处理非法文件名 var filename = FixFileName(j.Text); //每个文件存放在单独的文件夹 - var targetPath = $"{savePath}{filename}\\"; + var targetPath = $"{savePath}{filename}{Path.DirectorySeparatorChar}"; //重名文件处理 for (int i = 1; ; i++) { if (Directory.Exists(targetPath)) { - targetPath = $"{savePath}{filename} ({i})\\"; + targetPath = $"{savePath}{filename} ({i}){Path.DirectorySeparatorChar}"; } else {