抓取目录VB.net中文件夹的名称

时间:2014-10-29 19:14:31

标签: vb.net directory filepath

如果你安装了Java 8并且运行64和最新版本,你应该有一个名为(jre1.0.0_25)的文件夹 可在此处找到:C:\Program Files (x86)\Java

你如何在Java下获取名称文件的名称,这个名称会随着时间而改变(现在是jre1.0.0_25)?

我试过

New DirectoryInfo("C:\Program Files (x86)\Java\").Name

但它不起作用。

编辑:

提出了几个问题。

  1. 这是我对数据库进行写入的Windows服务的一部分 现在java没有向数据库发布任何内容,因此它会出错,因为它期待和回答。
  2. 我已经有32位对64位的方法。
  3. 它仅用于内部,我完全控制Java的安装方式和位置。
  4. 它也会用英文。
  5. 对此的一些指导将非常感激。 提前谢谢

    更新:我正在尝试将以下解决方案转换为函数,以便将其输出到数据库。

        Private Function java() As String
        Dim sourceDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Java")
        Dim dirInfo = New DirectoryInfo(sourceDir)
        For Each d In dirInfo.GetDirectories()
            Console.WriteLine(d.Name)
        Next
    
        java = Console.ReadLine()
        'Return dirInfo.ToString
    
    
    End Function
    

    现在尝试不同的东西我可以让代码显示为空白或路径。 我哪里错了?

1 个答案:

答案 0 :(得分:0)

我们需要确切地知道它是如何“不起作用的”。然而...

您需要查看DirectoryInfo.GetDirectories()的结果,如下所示:

Imports System.IO

Module Module1

    Sub Main()
        Dim sourceDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Java")
        Dim dirInfo = New DirectoryInfo(sourceDir)
        For Each d In dirInfo.GetDirectories()
            Console.WriteLine(d.Name)
        Next

        Console.ReadLine()

    End Sub

End Module

,在我的电脑上输出:

jre1.8.0_25
jre6
jre7

你必须决定如何找出你想要的目录。

我使用Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),因为如果Windows是不同的语言版本,“Program Files(x86)”目录可能会被命名为其他目录。但是,Java安装程序允许将其安装在其他位置,因此如果您想使其更加强大,则必须调查如何找到安装。

但是如果想要查找当前安装的Java版本,您应该检查注册表:Deploying the JRE on Windows的更多信息 - 我相信你可以做一些寻找是否仍然适用于Java 8。

检查JAVA.DLL

一些注意事项:

  • 似乎可以为x86版本并排安装Java 7和Java 8
  • 您还可以安装x86 Java 7和x64 Java 8
  • 如果您的程序编译为以x86运行,Environment.SpecialFolder.ProgramFiles指向与Environment.SpecialFolder.ProgramFilesX86相同的位置,那么它将无法检测Java的x64版本
  • x64 Java 8将其版本报告为8.0(phew!我认为目录名称为1.8,java -version报告“java版本1.8.0_25”。< / LI>
  • 为了获得稳健性,您将不得不考虑可能安装的内容并相应地调整代码。

我想出了这个:

Function GetMaxJavaVersion() As Decimal
    ' N.B. If this program is run as x86 then the 64-bit Program Files directory will not be accessed even
    ' with Environment.SpecialFolder.ProgramFiles
    Dim sourceDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Java")
    ' search in all the subdirectories for "java.dll"
    Dim javaDlls = Directory.GetFiles(sourceDir, "java.dll", SearchOption.AllDirectories)

    ' arrange it so that 0 is returned if not found
    Dim versions As New List(Of Decimal) From {0D}

    For Each jd In javaDlls
        Console.WriteLine(jd)
        Dim versionInfo = FileVersionInfo.GetVersionInfo(jd)
        versions.Add(CDec(String.Format("{0}.{1}", versionInfo.ProductMajorPart, versionInfo.ProductMinorPart)))
    Next

    Return versions.Max

End Function

我确定你可以修改它以检查x86和“普通”程序文件目录。

相关问题