2017-10-18 11 views
1

メインフォルダのファイルを検索するのにTextBoxがあります。サブフォルダもあります。 ListBoxの選択項目の現在のフォルダ名を別のListBoxに表示したいリストボックス内の選択したファイルの現在のフォルダ名を取得

どうすればよいですか?

私の最新の取り組み:

ここは私の完全なコーディングです!赤でマーク

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string path = @"C:\Users\guest\Desktop\test\"; 

     listBox2.Items.Clear(); 

     { 
      listBox2.Items.Add(Path.GetDirectoryName(path)); 
     } 
    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     DirectoryInfo sdir = new DirectoryInfo(@"C:\Users\guest\Desktop\test"); 
     FileInfo[] files = sdir.GetFiles(textBox1.Text.ToString() + "*", System.IO.SearchOption.AllDirectories); 
     string search = ""; 

     listBox1.Items.Clear(); 

     foreach (FileInfo file in files) 
     { 
      search = file.Name; 
      listBox1.Items.Add(Path.GetFileNameWithoutExtension(search)); 
     } 
    } 

必要な出力は、以下を参照してスナップ。その後、元のパスのコンテキストを失う -

ファイル名の検索とフルパスを取得 Filename search and get full path

+1

「現在のフォルダ名」あなたはパス(ファイル名を除く)を意味しますか? – mjwills

+1

コード内にハードコードされたフォルダ名があるようです。問題の内容は明らかではありません。選択した項目は何ですか?実際にリストボックスに何が挿入されますか? – David

+0

推測された推測。私はlistBox2で選択されたフォルダのサブフォルダを表示しようとしていると思います。 'System.IO.Directory.GetDirectories(path)'の意味は –

答えて

0

問題は、listBox1に追加するときにstringを追加しているということです。代わりに、のテキストにToStringとすることができるobject(例:TestPath)を追加しますが、まだ元のパスのコンテキストを保持しています。

以下は、その目的に役立つ場合があります。

このクラスを追加します。

public class TestPath 
{ 
    public FileInfo Original { get; private set; } 

    public TestPath(FileInfo original) 
    { 
     Original = original; 
    } 

    public override string ToString() 
    { 
     return Path.GetFileNameWithoutExtension(Original.Name); 
    } 
} 

は、次に置き換える:

foreach (FileInfo file in files) 
{ 
    search = file.Name; 
    listBox1.Items.Add(Path.GetFileNameWithoutExtension(search)); 
} 

で:次に

foreach (FileInfo file in files) 
{ 
    var path = new TestPath(file); 
    listBox1.Items.Add(path); 
} 

置き換える:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string path = @"C:\Users\guest\Desktop\test\"; 

    listBox2.Items.Clear(); 

    { 
     listBox2.Items.Add(Path.GetDirectoryName(path)); 
    } 
} 

と:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    listBox2.Items.Clear(); 

    var currentItem = listBox1.SelectedItem as TestPath; 
    listBox2.Items.Add(currentItem.Original.FullName); // or any property 
} 
+0

デバッグ中にエラーが発生しました。エラー1:ファイルは現在のコンテキスト(Form1.cs)に存在しません。&error-2: 'System.IO.FileSystemInfo.FullPath'は保護レベルのためアクセスできません。 – Sbk

+0

参考までに、[link](https://dotnetfiddle.net/OXyEff)。私は何かが不足している、親切にも私を導く! – Sbk

+0

「textBox1_TextChanged」からコードを削除しましたが、削除しないようにしました。元のコードに戻してから、私が提案した変更だけを**再度適用してください。 – mjwills

関連する問題