0

リストボックスがあり、ディレクトリフォルダーからロードされたファイルがいくつかあります。

ファイルを listBox1 にロードするコード:

private void Form1_Load(object sender, EventArgs e)
        {
            PopulateListBox(listbox1, @"C:\TestLoadFiles", "*.rtld");

        }

private void PopulateListBox(ListBox lsb, string Folder, string FileType)
        {
            DirectoryInfo dinfo = new DirectoryInfo(Folder);
            FileInfo[] Files = dinfo.GetFiles(FileType);
            foreach (FileInfo file in Files)
            {
                lsb.Items.Add(file.Name);
            }
        }

フォームのラベルに属性値を読み取って表示したい。に読み込まれたファイル。listBox1コードは次のとおりです。

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    string path = (string)listBox1.SelectedItem;
    DisplayFile(path);
} 
private void DisplayFile(string path)
{
    string xmldoc = File.ReadAllText(path);

    using (XmlReader reader = XmlReader.Create(xmldoc))
    {   

        while (reader.MoveToNextAttribute())
        {
          switch (reader.Name)
          {
            case "description":
              if (!string.IsNullOrEmpty(reader.Value))
                label5.Text = reader.Value; // your label name
              break;
            case "sourceId":
              if (!string.IsNullOrEmpty(reader.Value))
                label6.Text = reader.Value; // your label name
              break;
            // ... continue for each label
           }
        }
    }
} 

Problem:フォームが読み込まれた後に listBox1 のファイルをクリックすると、ファイルはフォルダーからリストボックスに読み込まれますが、エラーがスローされますFile not found in the directory

どうすればこの問題を解決できますか???

4

3 に答える 3

1

あなたが直面している問題は、リストボックスでファイルパスと名前全体ではなくファイル名のみを指定するため、ファイルを探すときに見つからないことです。

FileInfo.Name プロパティから

Gets the name of the file.

一方、 File.ReadAllTextメソッド (文字列)pathパラメーターとして受け取ります。

于 2012-05-10T04:50:58.973 に答える
1

これは、リストボックスFile.Nameに追加する必要がある代わりに追加しているためですFile.FullName

lsb.Items.Add(file.FullName);

したがって、メソッド PopulateListBox は次のようになります。

private void PopulateListBox(ListBox lsb, string Folder, string FileType)
        {
            DirectoryInfo dinfo = new DirectoryInfo(Folder);
            FileInfo[] Files = dinfo.GetFiles(FileType);
            foreach (FileInfo file in Files)
            {
                lsb.Items.Add(file.FullName);
            }
        }

編集: フルパスではなく、ファイル名のみを表示したいようです。次のアプローチに従うことができます。PopulateListBox で、file file.FullName の代わりに追加して、行が次のようになるようにします。

foreach (FileInfo file in Files)
            {
                lsb.Items.Add(file);
            }

次に、SelectedIndexChanged イベントで次の操作を行います。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            FileInfo file = (FileInfo)listbox1.SelectedItem;
            DisplayFile(file.FullName);
         }

これにより、完全な名前 (パスを含むファイル名) が取得され、File Not Found の例外が解決されます。

于 2012-05-10T04:51:11.250 に答える
0

フルパスを指定していません。

次のようなことを試してください:

 DisplayFile(@"C:\TestLoadFiles\" + path)
于 2012-05-10T04:51:59.850 に答える