VB.NET字符串路径自动切断

时间:2012-07-17 06:06:26

标签: vb.net path

我结束了一个发送和接收RS-232消息的简单程序。我的参数(波特率,COM端口)存储在INI文件中(如果不存在,文件将自动创建)。程序运行没有错误,但我不知道为什么它在路径长度超过限制时切断指向INI文件的路径(路径字符串中有Unicode日语字符)

我在New function(构造)中的路径字符串是这样的:"D:\通信プログラム20120709\新しいフォルダー\新しいフォルダー\新しいフォルダー\新しいフォルダー\Debug\Config.ini"

在事件函数中,它将变为:D:\通信プログラム20120709\新しいフォルダー\新しいフォルダー\新しいフォ・

在咨询了互联网上的一些来源之后,他们告诉我.NET字符串的容量非常大,所以我猜我的问题与VB.NET字符串无关。

任何帮助都将不胜感激。


来自评论

我发现路径在第一行代码

之后发生了变化
RS232TransPort = IniRoutine.GetString(IniSectionName, ConfigName.COMPort, "COM3")
RS232Baudrate = IniRoutine.GetInteger(IniSectionName, ConfigName.Baudrate, 9600)

这是获取字符串的函数:

Public Function GetString(ByVal Section As String, ByVal Key As String, ByVal [Default] As String) As String 

    Dim intCharCount As Integer 
    Dim objResult As New System.Text.StringBuilder(256) 

    intCharCount = GetPrivateProfileString(Section, Key, [Default], objResult, objResult.Capacity, strFilename) 
    GetString = String.Empty 

    If intCharCount > 0 Then GetString = Left(objResult.ToString, intCharCount) 

End Function 

其中strFilename是此类的局部变量。

这是API声明:

Private Declare Ansi Function GetPrivateProfileString _ 
        Lib "kernel32.dll" Alias "GetPrivateProfileStringA" _ 
        (ByVal lpApplicationName As String, _ 
        ByVal lpKeyName As String, ByVal lpDefault As String, _ 
        ByVal lpReturnedString As System.Text.StringBuilder, _ 
        ByVal nSize As Integer, ByVal lpFileName As String) _ 
        As Integer 

1 个答案:

答案 0 :(得分:0)

您正在使用GetPrivateProfileStringA而不是GetPrivateProfileStringW。

由于您使用的是Unicode,因此需要使用GetPrivateProfileStringW。