首页 > 解决方案 > 如何读取通过 G​​etFiles 函数找到的文件的文件属性?

问题描述

我正在尝试获取在 GridView 中显示的可执行文件、它们的目录和它们的版本号的集合,如下所示:

Dim dir As New DirectoryInfo("C:\Program Files (x86)\PathExample")
For Each foundFile As FileInfo In dir.GetFiles("*.exe", SearchOption.AllDirectories)
    Dim foundFileInfo = FileVersionInfo.GetVersionInfo(foundFile.ToString)
    'Dim foundFileInfo = FileVersionInfo.GetVersionInfo(foundFile.Directory.ToString)
    DataGridView1.Rows.Add(foundFileInfo, foundFile.Directory, foundFile)
Next foundFile

GridView 将成功显示可执行文件名称,以及它们各自列中的目录,但是,我得到了一个错误:

System.IO.FileNotFoundException:'Console.exe'

Console.exe 实际上是一个现有文件,它能够获取目录和可执行文件名,并将其存储在 GridView 中,只有当我尝试获取文件版本信息时,它才会开始抛出此错误。

我使用了错误的功能吗?我基本上需要能够从这个菜单中读取任何行: FileProperties

我需要能够单独读取每个属性,例如仅获取文件版本、版权信息或上次修改日期等,并将其存储到要放置在 GridView 中的列之一中的变量中。

标签: vb.net

解决方案


代码有几个问题:

  • FileVersionInfo.GetVersionInfo()需要文件的完整路径。不要使用foundFile.ToString. 相反,使用foundFile.FullName.

  • foundFile是一个 FileInfo 对象。您不应将其直接添加到 DataGridView 单元格。而是选择适当的属性。你可能想要foundFile.Name(或者也许.FullName)。

  • 同样,foundFileInfo是类型的对象FileVersionInfo。您应该使用特定属性在单元格中显示。

假设您需要单元格中的文件描述、目录路径和文件名(分别),您的代码应如下所示:

For Each foundFile As FileInfo In dir.GetFiles("*.exe", SearchOption.AllDirectories)
    Dim foundFileInfo = FileVersionInfo.GetVersionInfo(foundFile.FullName)
    DataGridView1.Rows.Add(foundFileInfo.FileDescription, foundFile.DirectoryName, foundFile.Name)
Next

您可以使用它foundFileInfo来获取文件版本、版权等其他信息。请参阅FileVersionInfo 类下的可用属性。


推荐阅读