Пример #1
0
        private void DataGridRow_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            // Handling of long paths has changed in .NET 4.6.2 and .NET Standard.
            // Consider using System.IO.Path to manipulate paths if targeting a
            // newer framework version.
            // (https://blogs.msdn.microsoft.com/jeremykuhne/2016/06/21/more-on-new-net-path-handling/)
            var row        = (DataGridRow)sender;
            var scanResult = (ScanItem)row.DataContext;
            var path       = scanResult.Path.TrimEnd(Path.DirectorySeparatorChar);

            if (!scanResult.IsDirectory)
            {
                int i = path.Length - 1;
                while (i > 0 && path[i] != Path.DirectorySeparatorChar)
                {
                    i--;
                }
                if (i <= 0)
                {
                    return;
                }
                path = path.Substring(0, i);
                path.TrimEnd(Path.DirectorySeparatorChar);
            }
            if (path.Length >= MAX_PATH)
            {
                int i = MAX_PATH - 1;
                while (i > 0 && path[i] != Path.DirectorySeparatorChar)
                {
                    i--;
                }
                if (i <= 0)
                {
                    return;
                }
                string root = path.Substring(0, i);
                string sub  = path.Substring(i + 1, path.Length - i - 1);
                if (DosDeviceHelpers.DosDeviceExist(Settings.Default.SubstDriveLetter))
                {
                    if (!DosDeviceHelpers.RemoveDosDevice(Settings.Default.SubstDriveLetter))
                    {
                        return;
                    }
                }
                if (!DosDeviceHelpers.AddDosDevice(root, Settings.Default.SubstDriveLetter))
                {
                    return;
                }
                path = Settings.Default.SubstDriveLetter + Path.DirectorySeparatorChar + sub;
            }
            System.Diagnostics.Process.Start(path);
        }