2015-11-13 93 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()讀取,名稱與其他答案類似。 –