none
文件路径有汉字会出问题 RRS feed

  • 问题

  •  

    我用FileVersionInfo.GetVersionInfo()方法读取文件的版本信息时,文件路径里有汉字的话就出现错误。

     

    有汉字路径的文件怎么获取版本信息?
    2008年11月7日 14:43

答案

  • 我试了一下没问题

    Code Snippet

    FileVersionInfo.GetVersionInfo("C:\Documents and Settings\All Users\桌面\新建 文本文档.txt").FileName

     

     

    2008年11月7日 15:15
    版主
  • 哦 对不起大家,我搞错了应该是这个 API函数:ExtractIcon
    如文件地址里面有汉字的话,下面代码输出有些奇怪.

    Public Class Form1

        Public Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" _
            (ByVal hInst As IntPtr, ByVal lpszExeFileName As String, ByVal nIconIndex As Integer) As IntPtr

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim returnIcon As Icon
            If Me.OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                Label1.Text = Me.OpenFileDialog1.FileName
                returnIcon = Icon.FromHandle(ExtractIcon(Me.Handle, Me.OpenFileDialog1.FileName, 0))
                Label2.Text = Me.OpenFileDialog1.FileName

            End If
        End Sub

    结果,label1 和label2 的输出结果不一样.

    2008年11月11日 12:44
  • Code Snippet

    returnIcon = Drawing.Icon.FromHandle(ExtractIcon(Me.Handle, Me.OpenFileDialog1.FileName & Chr(0), 0))

     

     

     

    2008年11月12日 2:49
    版主

全部回复

  • 我试了一下没问题

    Code Snippet

    FileVersionInfo.GetVersionInfo("C:\Documents and Settings\All Users\桌面\新建 文本文档.txt").FileName

     

     

    2008年11月7日 15:15
    版主
  • 请贴你的代码和路径名称

     

    .net使用unicode字符,不应当存在不同语言的问题

     

    2008年11月8日 2:59
    版主
  • Label1.Text=Me.OpenFileDialog.FileName

    输出结果是:D:\Program Files\Game\黑白棋.exe

    然后用这后  FileVersionInfo.GetVersionInfo(Me.OpenFileDialog.FileName).FileName

     

    Label2.Text=Me.OpenFileDialog.FileName

    输出结果是:D:\Program Files\Game\黑白

     

    为什么会这样呀?

     

     

    2008年11月9日 9:28
  • 经过测试,没有问题啊

    If Me.OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
      Label1.Text = Me.OpenFileDialog1.FileName
      Label2.Text = FileVersionInfo.GetVersionInfo(Me.OpenFileDialog1.FileName).FileName
    End If

     

    请讲一下你的运行环境和操作系统的版本。

    2008年11月9日 10:54
    版主
  • Label2.Autosize=true

     

    msgbox Me.OpenFileDialog.FileName

     

     

    2008年11月9日 11:17
    版主
  • 哦 对不起大家,我搞错了应该是这个 API函数:ExtractIcon
    如文件地址里面有汉字的话,下面代码输出有些奇怪.

    Public Class Form1

        Public Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" _
            (ByVal hInst As IntPtr, ByVal lpszExeFileName As String, ByVal nIconIndex As Integer) As IntPtr

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim returnIcon As Icon
            If Me.OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                Label1.Text = Me.OpenFileDialog1.FileName
                returnIcon = Icon.FromHandle(ExtractIcon(Me.Handle, Me.OpenFileDialog1.FileName, 0))
                Label2.Text = Me.OpenFileDialog1.FileName

            End If
        End Sub

    结果,label1 和label2 的输出结果不一样.

    2008年11月11日 12:44
  • Code Snippet

    returnIcon = Drawing.Icon.FromHandle(ExtractIcon(Me.Handle, Me.OpenFileDialog1.FileName & Chr(0), 0))

     

     

     

    2008年11月12日 2:49
    版主
  • 为什么那样做就没问题了?

     

    2008年11月13日 13:07