Сравнить имя подпапок - PullRequest
       11

Сравнить имя подпапок

0 голосов
/ 28 ноября 2018

Я не уверен, какой будет правильный вопрос для моего случая, но я постараюсь описать как можно лучше.Я должен отметить, что я не очень хорошо знаю этот язык, я использую его строго для исполняемого файла моего приложения, в основном я возиться с Java.Так что у меня есть приложение, которое запускается только в том случае, если оно находит Java на моем ПК.Я использую что-то вроде этого:

ProcessStartInfo startJava = new ProcessStartInfo("java", JavaProcessArguments());
startJava.CreateNoWindow = !client.ShowConsole;
startJava.UseShellExecute = false;

Но, скажем, я хочу использовать openJDK, тогда мне придется изменить "Java" на что-то вроде этого:

ProcessStartInfo startJava = new ProcessStartInfo
(@"C:\Program Files (x86)\Java\openJDK_1.7\bin\java.exe", JavaProcessArguments());

Двигаясь дальше, я хотел запустить openJDK FIRST, даже если java присутствует, поэтому я написал условие, которое делает это:

    private void StartTheProcess()
    {   
        string pathJDK = @"C:\Program Files (x86)\Java\openJDK_1.7\bin\";
        bool isDirJDK7 = Directory.Exists(pathJDK);
        if (isDirJDK7)
        {   
            ProcessStartInfo startJava = new ProcessStartInfo(@"C:\Program Files (x86)\Java\openJDK_1.7\bin\java.exe", JavaProcessArguments());
            startJava.CreateNoWindow = !client.ShowConsole;
            startJava.UseShellExecute = false;
            try
            {
                using (Process p = Process.Start(startJava))
                {
                    p.WaitForExit();
                }
            }
            catch (Win32Exception ex)
            {
                some error...
            }
            catch (Exception e)
            {
                some error...
            }
        }
        else
        {
                ProcessStartInfo startJava = new ProcessStartInfo("java", JavaProcessArguments());
                startJava.CreateNoWindow = !client.ShowConsole;
                startJava.UseShellExecute = false;
                try
                {
                    using (Process p = Process.Start(startJava))
                    {
                        p.WaitForExit();
                    }
                }
                catch (Win32Exception ex)
                {
                    some error...
                }
                catch (Exception e)
                {
                    some error...
                }
        }
     }

Теперь давайте предположим, что у меня есть больше версий openJDK в "C: \ Program Files"(x86) \ Java \ "папка: openJDK_1.7, openJDK_1.7_u1, openJDK_1.8 и т. д., и я хочу запустить последнюю.Как мне это сделать?Я думаю, что один из методов - сравнить найденные там имена подпапок, но я не знаю, как это сделать.Содержимое всех подпапок идентично, а имена подпапок имеют одинаковую конструкцию (openJDK_1.X / openJDK_1.X_uYZ).Не могли бы вы мне помочь, основываясь на этом плохо (скорее всего) коде?: D

1 Ответ

0 голосов
/ 28 ноября 2018

Есть несколько вещей, которые вы можете попробовать,

Разделите строку с именем каталога на var version = string.split('_'), и тогда версия будет version[1] = "1.7", вы можете преобразовать все это в double / decimals / floatи т. д. и просто отсортируйте данные, получите самую последнюю версию (ту, которая имеет наибольшее число и верните свой каталог

) Второе, что вы можете попробовать, это проверить Directory.GetLastWriteTime(String), который вы можете сравнить, инайдите последний, пожалуйста, не думайте, что это вообще ненадежно, поскольку папку можно изменить чем угодно.

...