【问题标题】:Compare subfolders name比较子文件夹名称
【发布时间】:2018-11-28 08:12:34
【问题描述】:

我不确定我的案例的正确问题是什么,但我会尽量描述得更好。我不得不提一下,我对这种语言了解不多,我严格地将它用于我的应用程序的可执行文件,主要是我在使用 Java。所以我有一个应用程序,它只有在我的 PC 中找到 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,即使存在 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...
                }
        }
     }

现在假设我在“C:\Program Files (x86)\Java\”文件夹中有多个openJDK版本:openJDK_1.7、openJDK_1.7_u1、openJDK_1.8等,我想启动最新的一。我应该如何做到这一点?我认为一种方法是比较在那里找到的子文件夹名称,但我真的不知道如何去做。所有子文件夹的内容相同,子文件夹的名称具有相同的结构(openJDK_1.X / openJDK_1.X_uYZ)。根据这个糟糕(最有可能)的代码,你能帮我吗? :D

【问题讨论】:

    标签: c# directory subdirectory


    【解决方案1】:

    您可以尝试一些事情,

    分割目录名字符串 var version = string.split('_'),然后版本为version[1] = "1.7",你可以将所有这些转换为双精度/小数/浮点数等,然后将数据排序出来,获取最新版本(编号最高的版本并获取其目录返回

    您可以尝试的第二件事是检查Directory.GetLastWriteTime(String),您可以比较它并找到最后一个,请不要说这根本不可靠,因为文件夹可以被任何东西更改。

    【讨论】:

    • 有必要拆分转数吗?文件夹名称是否按字母顺序排列成正确的顺序?以"openJDK"开头的文件夹名称列表,按名称排序,取最后一个?
    • 谢谢,试试看!
    • @SazooCat,这就是我从问题措辞中的想法
    • @SazooCat 是的,它们已排序,所以我需要检查数字,哪个数字最高的就是我要找的那个。模式为 openJDK_1.7 或 1.8,后接或不接 _u 后接另一个数字
    • 如果检查java.exe文件的程序集版本信息可能会更健壮?就像一种不同的方法理念......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    相关资源
    最近更新 更多