Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 无法在visual basic中对从系统获取的文件进行排序_Vb.net - Fatal编程技术网

Vb.net 无法在visual basic中对从系统获取的文件进行排序

Vb.net 无法在visual basic中对从系统获取的文件进行排序,vb.net,Vb.net,我正在尝试从应用程序中的系统获取文件。但在检索文件时,它通常会出现,但不是按顺序排列的。我想把我所有的文件都整理好。我对VisualBasic非常陌生,我尝试了很多东西,但无法按顺序获取文件。请帮帮我,先谢谢你 这是我的密码:- Dim path As String = "C:/UTRelOFA/Reva Test/src/00000178" Dim oFolder As New DirectoryInfo(path) Dim arr = oFolder.GetFiles("

我正在尝试从应用程序中的系统获取文件。但在检索文件时,它通常会出现,但不是按顺序排列的。我想把我所有的文件都整理好。我对VisualBasic非常陌生,我尝试了很多东西,但无法按顺序获取文件。请帮帮我,先谢谢你

这是我的密码:-

 Dim path As String = "C:/UTRelOFA/Reva Test/src/00000178"
    Dim oFolder As New DirectoryInfo(path)

   Dim arr =  oFolder.GetFiles(".tif")
     Array.Sort(arr)
    Cosole.writeline(arr)
我使用了很多东西,并参考了以下链接:

这里的问题是您是否应该调用
DirectoryInfo.GetFiles
Directory.GetFiles
。如果调用前者,则会得到一个
FileInfo
数组,因此如果要按文件名排序,则必须明确指定该数组,例如

Dim folderPath = "C:\UTRelOFA\Reva Test\src\00000178"
Dim folder As New DirectoryInfo(folderPath)
Dim files = folder.GetFiles("*.tif")

Array.Sort(files, Function(fi1, fi2) fi1.Name.CompareTo(fi2.Name))
如果您实际上不需要
FileInfo
对象,而只需要文件路径,请不要;t使用
目录信息
,例如

Dim folderPath = "C:\UTRelOFA\Reva Test\src\00000178"
Dim filePaths = Directory.GetFiles(folderPath, "*.tif")

Array.Sort(filePaths)

您正在调用
Array.Sort
对调用
GetFiles
返回的数组进行排序,但是您只需放弃该数组,再次调用
GetFiles
并使用未排序的结果。您需要将
GetFiles
的结果实际分配给
arr
变量,然后将
arr
传递给
Array.Sort
。另外,声明时不要为
arr
指定大小。您不需要创建数组
GetFiles
创建它,其大小由它获取的文件数决定。arr=oFolder.GetFiles(“.tif”)并将其传递给Array.Sort(arr)您正在讨论这个问题。我已经试过了,但是@jmcilhinneyCan不起作用。你可以为我提供适当的代码来解决这个问题吗?这对我很有帮助。你甚至不需要指定类型。您可以使用
Dim arr=oFolder.GetFiles(“*.tif”)
执行此操作,并且变量的类型将从方法的返回类型推断出来。还要注意,搜索模式需要是“*.tif”而不是“.tif”。您的模式将不匹配任何内容,因为没有具有该确切名称的文件。此外,请在项目属性中启用
选项。这将有助于在编译时而不是在运行时捕获与错误数据类型相关的问题。作为Array.Sort的替代方案,我更喜欢使用一点Linq
Dim sortedFiles=From file In files选择file Order By file.Name
我曾考虑过添加LINQ替代方案,但我想我会保持简单。如果要使用LINQ,我倾向于使用函数语法,即
Dim sortedFiles=files.OrderBy(function(fi)fi.Name).ToArray()
。请注意,使用查询语法或函数语法时,几乎需要调用
ToArray
ToList
调用,除非您只想对结果上的每个
循环运行一个
。因为我总是使用.ToArray或.ToList,所以我忘记了这一点。从未经修饰的Linq查询返回的奇怪(对我来说)数据类型使我总是使用我更熟悉的东西。谢谢提醒。玛丽,你可以考虑一个LINQ查询来简单地返回<代码> iQueLoad(t)< /C>。它通常是一种更为具体的类型,这取决于上次调用的扩展方法,但它是一个
IEnumerable(Of T)
这一事实几乎是最重要的。这意味着,如果您只想为每个
枚举一个
,那么您可以按原样使用它,但是如果您想随机访问这些项目,那么您应该调用
ToArray
ToList
。再次感谢@jmcilhinney。一个连我都能理解的解释!一个接口和一个泛型的返回值足以让我害怕。:-)保存到我的参考文件。顺便说一句,“在结果上为每个循环运行一个循环”我尝试为每个循环运行一秒钟,但仍然有效。抱歉吹毛求疵,我嫁给了一位工程师。:-)