Как открыть файлы в нескольких папках в виде дерева? - PullRequest
0 голосов
/ 25 сентября 2018

Я недавно начал заниматься программированием и работал над созданием своей первой программы.Он предназначен для хранения и создания заметок внутри папки, но у меня проблема с открытием текстовых файлов, которые находятся внутри других папок, кроме первой папки в моем древовидном представлении.Я пытался решить это в течение недели, но не смог найти решение.Что я упустил в своем программировании?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
using System.Windows.Forms;

namespace InfoHub
{
    public partial class InfoHome : Form
    {
        public InfoHome()
        {
            InitializeComponent();
        }

        private void InfoHome_Load(object sender, EventArgs e)
        {

            //puts info on the top all windows
            this.TopMost = true;

        }
        //this string path makes it possiable for "C:\\Users\\epoch\\Desktop\\InfoHub"
        //to be used in button2_Click
        string path = "C:\\Users\\epoch\\Desktop\\InfoHub";
        private void button1_Click(object sender, EventArgs e)
        {
            ListDirectory(treeView1, "C:\\Users\\epoch\\Desktop\\InfoHub"); 
        }
            // this is the Directory Structure
            private void ListDirectory(TreeView treeView, string path)
            {
                treeView.Nodes.Clear();
                var rootDirectoryInfo = new DirectoryInfo(path);

                treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo));

            }

            private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)
            {
                var directoryNode = new TreeNode(directoryInfo.Name);
                foreach (var directory in directoryInfo.GetDirectories())
                    directoryNode.Nodes.Add(CreateDirectoryNode(directory));

                foreach (var file in directoryInfo.GetFiles())
                    directoryNode.Nodes.Add(new TreeNode(file.Name));

                return directoryNode;
            }

        //this button click opens programs
        private void button2_Click(object sender, EventArgs e)
        {
            string TreeNodeName = treeView1.SelectedNode.ToString().Replace("TreeNode: ",string.Empty);

            System.Diagnostics.Process.Start(path + "\\" + TreeNodeName);
        }

        //this opens the notpad 
        private void button3_Click(object sender, EventArgs e)
        {
            Process.Start("notepad.exe");
        }

        private void button4_Click(object sender, EventArgs e)
        {
            folderCreator newform = new folderCreator();
            newform.ShowDialog();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

1 Ответ

0 голосов
/ 25 сентября 2018

Поскольку имя узла является либо именем каталога, либо файла, TreeNode.FullPath будет представлять относительный путь к файлу.Вы можете комбинировать это с базой path, чтобы получить полный путь:

private void button2_Click(object sender, EventArgs e)
{
    // "InfoHub" will appear twice below, GetParent removes one of them.
    var fullPath = Path.Combine(
        Directory.GetParent(path).FullName,
        treeView1.SelectedNode.FullPath
    );

    System.Diagnostics.Process.Start(fullPath);
}
...