C#实现资源管理器

using System;

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

namespace SourceManager
{
    public partial class Form1 : Form
    {
        string[] paths = new string[100];
        int currentPath = 0, maxPath = 0;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            TreeNode rootnode = this.treeView1.Nodes[0];
            rootnode.ImageIndex = 0;
            rootnode.Expand();
            TreeNode ndMyComputer = null;
            TreeNode ndDesktop = null;
            foreach (TreeNode nd in rootnode.Nodes)
            {
                if (nd.Name == "ndMyComputer")
                {
                    ndMyComputer = nd;
                }
                if (nd.Name == "ndDesktop")
                {
                    ndDesktop = nd;
                }
                nd.ImageIndex = 0;
            }
            //添加 我的电脑 的子节点
            DriveInfo[] drivers = DriveInfo.GetDrives();
            foreach (DriveInfo driver in drivers)
            {
                TreeNode node = new TreeNode(driver.Name.Substring(0, driver.Name.Length-1));
                node.ImageIndex = 0;
                node.Tag = driver.RootDirectory.FullName.Substring(0, driver.Name.Length - 1);
                ndMyComputer.Nodes.Add(node);
            }
            //添加 桌面 的子节点
            string DesktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            ndDesktop.Tag = DesktopPath;
            DirectoryInfo MyDocument = new DirectoryInfo(DesktopPath);
            DirectoryInfo[] folders = MyDocument.GetDirectories();
            FileInfo[] files = MyDocument.GetFiles();
            foreach (DirectoryInfo folder in folders)
            {
                TreeNode node = new TreeNode(folder.Name);
                node.Tag = folder.FullName;
                node.ImageIndex = 0;
                node.Name = folder.LastWriteTime.ToString();
                ndDesktop.Nodes.Add(node);
            }
            foreach (FileInfo file in files)
            {
                TreeNode node = new TreeNode(file.Name);
                switch (file.Extension)
                {
                    case ".rar":
                    case ".zip":
                        node.ImageIndex = 2;
                        break;
                    case ".wps":
                    case ".doc":
                        node.ImageIndex = 3;
                        break;
                    case ".xls":
                        node.ImageIndex = 4;
                        break;
                    case ".xv":
                    case ".avi":
                    case ".flv":
                    case ".rmvb":
                        node.ImageIndex = 5;
                        break;
                    case ".jpg":
                    case ".png":
                    case ".ico":
                        node.ImageIndex = 6;
                        break;
                    default:
                        node.ImageIndex = 1;
                        break;
                }
                node.Tag = file.FullName;
                node.Name = file.LastWriteTime.ToString();
                ndDesktop.Nodes.Add(node);
            }
        }

        private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
        {

            if (e.Node.Parent == null)
            {
                return;
            }
            foreach (TreeNode node in e.Node.Nodes)
            {
                if (node.Tag == null)
                {
                    continue;
                }
                DirectoryInfo folder = new DirectoryInfo(node.Tag.ToString());
                DirectoryInfo[] subFolders = null;
                FileInfo[] subFiles = null;
                try
                {
                    subFolders = folder.GetDirectories();
                    subFiles = folder.GetFiles();
                }
                catch (Exception)
                {
                }
                if (subFolders != null)
                {
                    foreach (DirectoryInfo subFolder in subFolders)
                    {
                        TreeNode subNode = new TreeNode(subFolder.Name);
                        subNode.Name = subFolder.LastWriteTime.ToString();
                        subNode.Tag = subFolder.FullName;
                        subNode.ImageIndex = 0;
                        bool isExit = false;
                        foreach (TreeNode exitNode in node.Nodes)
                        {
                            if (exitNode.Text == subNode.Text)
                            {
                                isExit = true;
                                break;
                            }
                        }
                        if (!isExit)
                            node.Nodes.Add(subNode);
                    }
                }
                if (subFiles != null)
                {
                    foreach (FileInfo file in subFiles)
                    {
                        TreeNode subNode = new TreeNode(file.Name);
                        subNode.Tag = file.FullName;
                        subNode.Name = file.LastWriteTime.ToString();
                        switch (file.Extension)
                        {
                            case ".txt":
                                subNode.ImageIndex = 1;
                                break;
                            case ".rar":
                            case ".zip":
                                subNode.ImageIndex = 2;
                                break;
                            case ".wps":
                            case ".doc":
                                subNode.ImageIndex = 3;
                                break;
                            case ".xls":
                                subNode.ImageIndex = 4;
                                break;
                            case ".xv":
                            case ".avi":
                            case ".flv":
                            case ".rmvb":
                            case ".3gp":
                            case ".wmv":
                            case ".mp4":
                                subNode.ImageIndex = 5;
                                break;
                            case ".jpg":
                            case ".png":
                            case ".ico":
                                subNode.ImageIndex = 6;
                                break;
                            default:
                                subNode.ImageIndex = 1;
                                break;
                        }
                        bool isExit = false;
                        foreach (TreeNode exitNode in node.Nodes)
                        {
                            if (exitNode.Text == subNode.Text)
                            {
                                isExit = true;
                                break;
                            }
                        }
                        if (!isExit)
                            node.Nodes.Add(subNode);
                    }
                }
            }
            //MessageBox.Show("expand", "提示信息");
        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Text == "资源管理器")
            {
                return;
            }
            bool isFolder = false;
            if (e.Node.ImageIndex != 0) {
                toolStripComboBox1.Text = e.Node.Parent.Tag + "";
            }
            else{
                toolStripComboBox1.Text = e.Node.Tag+"";//路径
            }
            e.Node.SelectedImageIndex = e.Node.ImageIndex;
            if (toolStripComboBox1.Text != "")
            {
                currentPath = maxPath;
                paths[maxPath] = toolStripComboBox1.Text;
                maxPath++;
            }
            this.listView1.Items.Clear();
            this.listView1.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
            foreach (TreeNode son in e.Node.Nodes) {
                ListViewItem lvi = new ListViewItem();
                lvi.StateImageIndex = son.ImageIndex;
                lvi.Text = son.Text;
                lvi.SubItems.Add(son.Name);
                if (lvi.StateImageIndex == 0)
                {
                    lvi.SubItems.Add("");
                }
                else {
                    try{
                        FileInfo file = new FileInfo(son.Tag.ToString());
                        lvi.SubItems.Add((file.Length/1000).ToString() + "KB");
                    }
                    catch (Exception) { }
                }
                this.listView1.Items.Add(lvi);
                isFolder = true;
            }
            if (e.Node.IsExpanded == false && isFolder == false)
            {
                ListViewItem lvi = new ListViewItem();
                lvi.StateImageIndex = e.Node.ImageIndex;
                lvi.Text = e.Node.Text;
                lvi.SubItems.Add(e.Node.Name);
                try
                {
                    //MessageBox.Show(toolStripComboBox1.Text, "");
                    FileInfo file = new FileInfo(toolStripComboBox1.Text + "\\" + lvi.Text);
                    lvi.SubItems.Add((file.Length/1000).ToString()+"KB");
                }
                catch { }
                this.listView1.Items.Add(lvi);
            }
            this.listView1.EndUpdate();  //结束数据处理,UI界面一次性绘制。
        }

        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            foreach (ListViewItem lvi in listView1.SelectedItems)
            {
               if (lvi.StateImageIndex == 0)
                {
                    DirectoryInfo dir = null;
                    DirectoryInfo[] subdirs = null;
                    FileInfo[] subfiles = null;
                    try
                    {
                        if (toolStripComboBox1.Text == "")
                            dir = new DirectoryInfo(@lvi.Text + "\\");
                        else
                            dir = new DirectoryInfo(@toolStripComboBox1.Text + "\\" + lvi.Text);
                        subdirs = dir.GetDirectories();
                        subfiles = dir.GetFiles();
                    }
                    catch (Exception)
                    {
                        return;
                    }
                    this.listView1.Items.Clear();
                    this.listView1.BeginUpdate();
                    foreach (DirectoryInfo son in subdirs)
                    {
                        ListViewItem sublvi = new ListViewItem();
                        sublvi.StateImageIndex = 0;
                        sublvi.Text = son.Name;
                        sublvi.SubItems.Add(son.LastWriteTime.ToString());
                        sublvi.SubItems.Add("");
                        this.listView1.Items.Add(sublvi);;
                    }
                    foreach (FileInfo son in subfiles)
                    {
                        ListViewItem sublvi = new ListViewItem();
                        sublvi.Text = son.Name;
                        sublvi.SubItems.Add(son.LastWriteTime.ToString());
                        switch (son.Extension)
                        {
                            case ".txt":
                                sublvi.StateImageIndex = 1;
                                break;
                            case ".rar":
                            case ".zip":
                                sublvi.StateImageIndex = 2;
                                break;
                            case ".wps":
                            case ".doc":
                                sublvi.StateImageIndex = 3;
                                break;
                            case ".xls":
                                sublvi.StateImageIndex = 4;
                                break;
                            case ".xv":
                            case ".avi":
                            case ".flv":
                            case ".rmvb":
                            case ".3gp":
                            case ".wmv":
                            case ".mp4":
                                sublvi.StateImageIndex = 5;
                                break;
                            case ".jpg":
                            case ".png":
                            case ".ico":
                                sublvi.StateImageIndex = 6;
                                break;
                            default:
                                sublvi.StateImageIndex = 1;
                                break;
                        }
                        sublvi.SubItems.Add((son.Length/ 1000).ToString() + "KB");
                        this.listView1.Items.Add(sublvi);
                    }
                    this.listView1.EndUpdate();
                    //路径
                    if (toolStripComboBox1.Text == "")
                        toolStripComboBox1.Text = lvi.Text;
                    else
                        toolStripComboBox1.Text = toolStripComboBox1.Text + "\\" + lvi.Text;
                    if (toolStripComboBox1.Text != "")
                    {
                        currentPath = maxPath;
                        paths[maxPath] = toolStripComboBox1.Text;
                        maxPath++;
                    }
                }
                if (lvi.StateImageIndex != 0)
                {
                    try
                    {
                        System.Diagnostics.Process.Start(toolStripComboBox1.Text + "\\" + lvi.Text);
                    }
                    catch(Exception){
                    }
                }
            }

        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            if (currentPath > 0)
            {
                currentPath--;
                toolStripComboBox1.Text = paths[currentPath];
                updateListView(toolStripComboBox1.Text);
            }
        }

        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            if (currentPath < maxPath && paths[1 + currentPath] != "" && paths[1 + currentPath] != null)
            {
                currentPath++;
                toolStripComboBox1.Text = paths[currentPath];
                updateListView(toolStripComboBox1.Text);
            }
        }

        private void updateListView(string path)
        {
            DirectoryInfo dir = null;
            DirectoryInfo[] subdirs = null;
            FileInfo[] subfiles = null;
            try
            {
                if (path != "")
                {
                    dir = new DirectoryInfo(@path);
                }
                subdirs = dir.GetDirectories();
                subfiles = dir.GetFiles();
            }
            catch (Exception)
            {
                return;
            }
            this.listView1.Items.Clear();
            this.listView1.BeginUpdate();
            foreach (DirectoryInfo son in subdirs)
            {
                ListViewItem sublvi = new ListViewItem();
                sublvi.StateImageIndex = 0;
                sublvi.Text = son.Name;
                sublvi.SubItems.Add(son.LastWriteTime.ToString());
                sublvi.SubItems.Add("");//大小
                this.listView1.Items.Add(sublvi); ;
            }
            foreach (FileInfo son in subfiles)
            {
                ListViewItem sublvi = new ListViewItem();
                sublvi.Text = son.Name;
                sublvi.SubItems.Add(son.LastWriteTime.ToString());
                switch (son.Extension)
                {
                    case ".txt":
                        sublvi.StateImageIndex = 1;
                        break;
                    case ".rar":
                    case ".zip":
                        sublvi.StateImageIndex = 2;
                        break;
                    case ".wps":
                    case ".doc":
                        sublvi.StateImageIndex = 3;
                        break;
                    case ".xls":
                        sublvi.StateImageIndex = 4;
                        break;
                    case ".xv":
                    case ".avi":
                    case ".flv":
                    case ".rmvb":
                    case ".3gp":
                    case ".wmv":
                    case ".mp4":
                        sublvi.StateImageIndex = 5;
                        break;
                    case ".jpg":
                    case ".png":
                    case ".ico":
                        sublvi.StateImageIndex = 6;
                        break;
                    default:
                        sublvi.StateImageIndex = 1;
                        break;
                }
                sublvi.SubItems.Add((son.Length/1000).ToString()+"KB");
                this.listView1.Items.Add(sublvi);
            }
            this.listView1.EndUpdate();        
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            updateListView(toolStripComboBox1.Text);
        }

        private void 新建文件夹ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string dirName = "\\新建文件夹";
            if (toolStripComboBox1.Text != "")
            {
                Directory.CreateDirectory(toolStripComboBox1.Text + dirName);
                updateListView(toolStripComboBox1.Text);
            }
        }

        private void 新建文本ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string fileName = "\\新建文本文件.txt";
            if (toolStripComboBox1.Text != "")
            {
                File.Create(toolStripComboBox1.Text + fileName).Close();
                updateListView(toolStripComboBox1.Text);
            }
        }

        private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("tgl的博客 http://blog.csdn.net/wotgl", "帮助");
        }
    }
}

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现C#文件资源管理器,可以使用ListView控件来显示文件和文件夹的列表。可以使用Directory类的GetDirectories和GetFiles方法来获取指定目录下的文件夹和文件的路径。然后使用ListViewItem来创建项,并添加到ListView中显示。以下是一个示例代码来实现文件资源管理器: private void ListDirsAndFiles(string strDir) { ListViewItem lvi; int nImgIndex; string[] items = new string; string[] dirs; string[] files; try { dirs = Directory.GetDirectories(@strDir); files = Directory.GetFiles(@strDir); } catch { return; } lvFiles.BeginUpdate(); lvFiles.Clear(); lvFiles.Columns.AddRange(new ColumnHeader[] { chhName, chSize, chTime, chType }); for(int i = 0; i < dirs.Length; i++) { items = Path.GetFileName(dirs[i]); items = ""; items[2] = "文件夹"; items = Directory.GetLastWriteTime(dirs[i]).ToLongDateString() + " " + Directory.GetLastWriteTime(dirs[i]).ToLongTimeString(); lvi = new ListViewItem(items, 1); lvFiles.Items.Add(lvi); } for(int i = 0; i < files.Length; i++) { items = Path.GetFileName(files[i]); FileInfo fi = new FileInfo(files[i]); items = fi.Length.ToString(); items = fi.Extension + "文件"; items = fi.LastWriteTime.ToLongDateString() + " " + fi.LastWriteTime.ToLongTimeString(); lvi = new ListViewItem(items, nImgIndex); lvFiles.Items.Add(lvi); } lvFiles.EndUpdate(); } 以上代码使用ListView控件显示文件和文件夹的名称、大小、修改时间和文件类型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C#实用教程文件操作实验(模拟资源管理器)](https://blog.csdn.net/qq_54032440/article/details/128267397)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值