我用VB6.0 sp6做一个MP3下载管理程序的时候发现一个怪事,例如目标文件路径:"L:\刘德华 - 忘情水.mp3",
用t=len("L:\刘德华 - 忘情水.mp3")得到的字符数t为18个,而我数一下却只有16个,程序的目的是想将硬盘的一个
MP3文件复制到U盘上或者是MP3播放器里,MP3文件名存在数据库里,硬盘文件用数字编号,复制的时候从数据库取文件名。
我在移动光标的时候,在" 忘"之间要多移动一次光标才能过来,真的很奇怪,我试了一下用键盘输入,结果程序能执行,
请帮忙解答一下~~~,多谢了~~~部分代码如下:'模块代码Option ExplicitPublic Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal lpProgressRoutine As Long, lpData As Any, ByRef pbCancel As Long, ByVal dwCopyFlags As Long) As LongPrivate Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Const COPY_FILE_FAIL_IF_EXISTS = &H1 '如果要复制的文件已存在,则函数将失败返回
Public Const COPY_FILE_RESTARTABLE = &H2     '函数记录下文件的复制进度,如果复制在中途失败,则可用同样的lpExistingFileName和lpNewFileName来重新开始先前失败的复制操作。Public Const PROGRESS_CANCEL = 1
Public Const PROGRESS_CONTINUE = 0
Private Const PROGRESS_QUIET = 3
Private Const PROGRESS_STOP = 2Global gflagPause&    '暂停拷贝标志位
Global gflagCancel&   '取消标志位
Private Const INFINITE = &HFFFF
Private Sub cmdOk_Click()    Dim SourceFile$, DestinationFile$, ret&    SourceFile$ = txtSource.Text
    DestinationFile$ = txtDestination.Text    cmdOk.Enabled = False
  
    gflagCancel& = PROGRESS_CONTINUE    ret& = CopyFileEx(SourceFile$, DestinationFile$, AddressOf CopyProgressRoutine, ByVal 0&, gflagCancel&, COPY_FILE_RESTARTABLE)    If ret& <> 0 Then MsgBox "复制完成", vbInformation, "温馨提示"    cmdOk.Enabled = True
    ProgressBar.Value = 0End Sub

解决方案 »

  1.   

    在文件名中间有两个空格,也就是"-"的两边,总之Len()是不会错的。
    在文件夹中显示的文件名中的空格非常小,几乎看不清,让你误以为没有,用光标就可数到。
    或许有其他不可显示的字符也有可能,这事经常碰到,不足为怪。
      

  2.   

    ("L:\刘德华(这里是有两个空格)-(  )忘情水.mp3")
      

  3.   

    L : \ 刘 德 华       -        忘 情  水 .  m  p  3
    1 2 3 4  5 6  7 8  9  10 11 12 13 14 15 16 17 18
      

  4.   

    你可以先将空格去掉再看长度,应该对了。
    len(replace("L:\刘德华 - 忘情水.mp3"," ",""))=14 
      

  5.   

    应该中间含有不可显示的ascii码
    比如空格,chr(0),chr(10)等,使用for 循环看看就知道了
      

  6.   

    问题终于找到了,原来是多了个换行符(vbCrLf),所以len()多出两个字符,感谢大家的回答