0

ユーザーが選択したディレクトリに応じて、完全なファイル名 (例: F:\logs\1234.log) をリストボックスにロードするコードがあります。ユーザーが 1 つ以上のファイルを選択して出力ボタンをクリックすると、選択した各ファイルをコードで読み取る必要があります。以前は、コンボボックスとコードを使用していました:

StreamReader sr = new StreamReader(comboBox1.Text);

これは明らかにリストボックスでは機能しません。リストボックスからユーザーが選択したファイルをプログラムに読み込ませる最も簡単な方法は何ですか?

4

4 に答える 4

0

ListBoxで選択されたすべてのアイテムにアクセスするには、SelectedItemsプロパティを使用できます。

foreach (string value in listBox1.SelectedItems)
{
    StreamReader sr = new StreamReader(value);
    ...
}
于 2012-07-24T17:50:20.273 に答える
0

元の質問でもっと明確にする必要がありました...しかし、すべてのファイルを読む必要がある場合:

        var items = listBox.SelectedItems;
        foreach (var item in items)
        {
            string fileName = listBox.GetItemText(item);
            string fileContents = System.IO.File.ReadAllText(fileName);
            //Do something with the file contents
        }
于 2012-07-24T17:34:37.820 に答える
0

開くたびに 1 つのファイルを選択する場合、解決策は次のようになります。

string[] files = Directory.GetFiles(@"C:\");
listBox1.Items.Clear();
listBox1.Items.AddRange(files);

次に、選択したファイル パスに到達するには:

if (listBox1.SelectedIndex >= 0)
{ // if there is no selectedIndex, property listBox1.SelectedIndex == -1
       string file = files[listBox1.SelectedIndex];
       FileStream fs = new FileStream(file, FileMode.Open);
       // ..
}
于 2012-07-24T17:34:48.583 に答える
0

選択したファイルのすべてのテキストを保持する一般的なリストを作成するためにできること:

    void GetTextFromSelectedFiles()
    {
        List<string> selectedFilesContent = new List<string>();
        for (int i = 0; i < listBox1.SelectedItems.Count; i++)
        {
            selectedFilesContent.Add(ReadFileContent(listBox1.SelectedItems.ToString()));
        }

        //when the loop is done, the list<T> holds all the text from selected files!
    }

    private string ReadFileContent(string path)
    {
        return File.ReadAllText(path);
    }

あなたの例で、ファイルを読み取るために「できるだけ簡単に」と明示的に言ったときは、 StreamReader クラスを使用するよりもFile.ReadAllText()メソッドを使用するのが最善だと思います。

于 2012-07-24T17:47:56.657 に答える