2016-09-28 18 views
0

私はComboboxを持っており、その中にフォルダ名を選択しています。このフォルダを最初に検索する必要があります。これらのフォルダには、 "バージョン"という名前のフォルダもあります。これらのフォルダには、Listviewに追加する必要がある別のフォルダがあります。私はこれを試みたが、何も私のリストビューに追加されていない:リストビューにサブフォルダ名を追加

Dim Folder_To_Search As String() = IO.Directory.GetDirectories("D:\", MyCombo.Text, System.IO.SearchOption.AllDirectories) 

      For Each folder As String In Folder_To_Search 
       ListView1.Items.Add(Path.GetFileName(folder + "\Versions\")) 
      Next 

私は+の後に何か欠けていると思います「\バージョン\」、誰かが私に手掛かりを与えることができますか?

+0

'Path.GetFileName()'は渡された文字列からファイル名を取得します - パスまたは部分パス。あなたはそのパスからファイル名を取得しようとしていますか? – Plutonix

+0

@Plutonixはい。 D:\ Microsoft \ Versions \ ... – LuckyLuke82

+0

文字列をプラス( '+')で連結しないでください。主に加算演算子です。 VB.NETは、ネイティブの連結演算子としてアンパサンド( '&')を使用します。これを使用することで、[ここ](http://stackoverflow.com/a/734631/3740093)に記載されているような問題に陥ることはありません。 –

答えて

1

GetDirectoriesは、その名前が示すとおり、ディレクトリを返しますので、リストビューに何も追加されていません。だからあなたのディレクトリのリストを取得して、それぞれの上にPath.GetFilenameを使用していますが、ディレクトリの最後にファイル名がないので、空の文字列だけがリストビューに追加されます。


コメントの編集:基本的に2つのネストされたディレクトリ検索を実行する必要があるようです。 「マイクロソフト」などのフォルダの最初のものとMicrosoftフォルダ内の「バージョン」のための第二は、ループを通過すると、ファイルを取得:

Dim TopLevelDirectories As String() = IO.Directory.GetDirectories("D:\", "*" & MyCombo.Text & "*", System.IO.SearchOption.AllDirectories) 
    For Each tlDir As String In TopLevelDirectories 
     Dim SubLevelDirectories As String() = IO.Directory.GetDirectories(tlDir, "*Versions*", System.IO.SearchOption.AllDirectories) 
     For Each slDir As String In SubLevelDirectories 
      Dim dInfo As DirectoryInfo = New DirectoryInfo(slDir) 
      Dim fInfo() As FileInfo = dInfo.GetFiles 
      For Each f As FileInfo In fInfo 
       ListView1.Items.Add(f.FullName) 'or ListView1.Items.Add(f.Name) 
      Next 
     Next 
    Next 

私が正しくあなたの目標を理解していれば、上記のコードは、すべてのファイルを見つける必要がありますあなたが探しています。私はいくつかのテストフォルダを作成し、ディレクトリの異なるレベルでMicrosoft/Versionsを投げました。このコードはそれらをすべて取り出しました

+0

返信と説明に感謝します。私は今あなたのポイントを見ます。しかし、あなたのコードは動作しません。私は非常に精巧ではなかった: "マイクロソフト"は "D:\マイクロソフト"にだけではなく、 "D:\ SomeFolder \ Microsoft \"にも配置することができます。したがって、Microsoftが最初に検索する必要があるので、SearchOption.Alldirectoriesを使用しています。あなたのようなコンボボックス連結はそれをしません。 – LuckyLuke82

+0

「Microsoft」の場所を最初に検索してから変数を場所に配置し、そのコードを回答に続けることはできませんか? –

+0

私はあなたの目標を誤解しています。私はコードを編集しました。あなたが今達成しようとしていることがうまくいくと思います。 – soohoonigan

関連する問題