diff --git a/src/Common.CoreLib/IOPath.cs b/src/Common.CoreLib/IOPath.cs index 2f5a06630..7a4948f2b 100644 --- a/src/Common.CoreLib/IOPath.cs +++ b/src/Common.CoreLib/IOPath.cs @@ -227,14 +227,14 @@ namespace System public static bool? IsDirectory(string path, [NotNullWhen(false)] out FileInfo? fileInfo, [NotNullWhen(true)] out DirectoryInfo? directoryInfo) { fileInfo = new(path); - if (fileInfo.Exists) + if (fileInfo.Exists) // 路径为文件 { directoryInfo = null; return false; } fileInfo = null; directoryInfo = new(path); - if (directoryInfo.Exists) + if (directoryInfo.Exists) // 路径为文件夹 { return true; } diff --git a/src/ST.Client.Desktop/Services/IDesktopPlatformService.cs b/src/ST.Client.Desktop/Services/IDesktopPlatformService.cs index 5ab886df3..cfb73b60d 100644 --- a/src/ST.Client.Desktop/Services/IDesktopPlatformService.cs +++ b/src/ST.Client.Desktop/Services/IDesktopPlatformService.cs @@ -142,15 +142,41 @@ namespace System.Application.Services /// void OpenFolder(string path) { - var isDirectory = IOPath.IsDirectory(path, out var fileInfo, out var directoryInfo); - if (!isDirectory.HasValue) return; - if (isDirectory.Value) + sbyte isDirectory = -1; + FileInfo? fileInfo; + DirectoryInfo directoryInfo = new(path); + if (directoryInfo.Exists) // 路径为文件夹,则打开文件夹 { - OpenFolderByDirectoryPath(directoryInfo!); + fileInfo = null; + isDirectory = 1; } else { - OpenFolderSelectFilePath(fileInfo!); + fileInfo = new(path); + if (fileInfo.Exists) // 路径为文件,则打开文件 + { + isDirectory = 0; + } + else if (fileInfo.DirectoryName != null) + { + directoryInfo = new(fileInfo.DirectoryName); + fileInfo = null; + if (directoryInfo.Exists) // 路径为文件但文件不存在,文件夹存在,则打开文件夹 + { + fileInfo = null; + isDirectory = 1; + } + } + } + + switch (isDirectory) + { + case 1: + if (directoryInfo != null) OpenFolderByDirectoryPath(directoryInfo); + break; + case 0: + if (fileInfo != null) OpenFolderSelectFilePath(fileInfo); + break; } }