我正在使用VB6应用程序,其中一些客户使用旧版本,而某些客户使用新版本。
在新版本中,存在一个使用FileSystemObject和For Each循环填充目录子文件夹的列表框:
Dim objFileSys As New FileSystemObject
Dim myFolder as Folder
Set myFolder = objFileSys.GetFolder(Path)
For Each mysubfolder In myFolder.SubFolders
listbox1.AddItem mysubfolder.Name
Next
在旧版本中,使用Dir $函数:
Dim DirName As String
DirName = Dir$(Path, ATTR_DIRECTORY)
Do While DirName <> ""
If DirName <> "." And DirName <> ".." Then
If (GetAttr(Path & DirName) And ATTR_DIRECTORY) = ATTR_DIRECTORY Then
listbox1.AddItem DirName
End If
End If
DirName = Dir$
Loop
在旧版本中,listbox1.sort属性为true,在新版本中,listbox1.sort属性为false。没有代码可以执行任何排序。
在这里很奇怪。在Windows 10中运行应用程序时,列表框在两个版本中均正确排序。当我在Windows 7中运行该应用程序时,旧版本(具有listbox.sort = true的版本)未正确排序,但新版本(具有listbox.sort = false的版本)未正确排序。
什么可能导致这种情况发生?
答案 0 :(得分:0)
这很可能取决于操作系统中文件系统API调用返回文件的顺序。也可能取决于所使用的文件系统。
许多文件系统不是本质上排序的结构,但是用于表示它们的客户端软件通过排序(例如)来掩盖这一事实。文件和文件夹列表。
例如Flash MP3播放器的一个常见问题是人们将音乐文件复制到其中,导致播放不正常,因为固件只是按照文件分配表中出现的顺序读取文件,而忽略文件名(即使他们使用{ {1}}这种名称。
听起来其中之一是正确的
这样可以解释“随机”排序顺序。
回到VB6:VB6 ListBox控件的Sorted属性是所谓的“ Action”属性-对其进行设置。填充列表时,该控件不会对列表进行排序。填充列表,然后设置.Sorted属性。
新代码可能会产生一个排序列表,因为FileSystemObject的行为与01 - track name
不同(即,它可能对文件进行排序是因为这很常见)
Dir$()