2015-11-13 89 views
0

文件名字,我有这样的代码:获取目录

Try 
     For Each file As String In My.Computer.FileSystem.GetFiles("directory") 
      FormMain.listbox.Items.Add(file) 
     Next 
    Catch 
    End Try 

它会给我的目录文件列表(比如:C:\ DIR \ file.txt的),但我需要得到唯一的文件名(如:file.txt) - 不带地址的名称。 在此先感谢!

+3

查看['Path'](https://msdn.microsoft.com/en-us/library/System.IO.Path(v = vs.110).aspx)类。它在这个领域有许多有用的方法,其中之一就是你正在寻找的东西。 –

+0

@JamesThorpe帮助 - 谢谢 – user4653508

回答

0

你必须使用FileInfo Class

Try 
     For Each file As String In My.Computer.FileSystem.GetFiles("directory") 
      Dim information = My.Computer.FileSystem.GetFileInfo(file) 
      FormMain.listbox.Items.Add(information.Name) 
     Next 
Catch 
End Try 
+0

这需要两次访问每个文件的磁盘。 –

+0

请注意,您可以声明您的for循环,如下所示:'为每个文件作为System.IO.FileInfo在新System.IO.DirectoryInfo(“目录”)。GetFiles'并避免上述循环内的第一行。 – RianBattle

2

我们可以做到这一点作为一个班轮的乐趣:

Try 
    FormMain.listbox.Items.AddRange(New IO.DirectoryInfo("directory").EnumerateFiles().Select(Function(f) f.Name).ToArray()) 
Catch 
End Try 

而且,我希望这大概快两倍,目前公认的运行回答,因为它只需要为每个文件访问一次硬盘。对于每个文件,加密的答案都会转到磁盘两次。也就是说,这不太可能推动你的程序的性能。

2
For Each file As String In My.Computer.FileSystem.GetFiles("directory") 
    ListBox1.Items.Add(IO.Path.GetFileName(file)) 
Next 
+0

这需要两次到每个文件的磁盘。 –

+1

@JoelCoehoorn第一次访问磁盘是GetFiles。第二个是什么?我不认为Path类做过任何磁盘活动。这只是实用方法。 –

+0

你说得对。出于某种原因,我正在查看它,并将其作为新的GetFileInfo()读取,名称与其他答案类似。 –