日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TreeView控件应用--访问文件或文件夹(一)

發(fā)布時(shí)間:2023/12/4 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TreeView控件应用--访问文件或文件夹(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C#TreeView訪問文件或文件夾,通過遞歸,展開所有文件夾(類似資源管理器的樹形窗體)

首先,算法是用遞歸算法,不斷的遞歸文件。以此來遍歷整個(gè)電腦的磁盤內(nèi)容,過程也很簡(jiǎn)單。這種算法的時(shí)間復(fù)雜度太大。以至于窗體打開較慢,效率不高。

View Code 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 FolderBrowserApp {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){try{//獲取所有驅(qū)動(dòng)盤目錄string[] s = Directory.GetLogicalDrives();//通過遍歷去添加所有父節(jié)點(diǎn)foreach (string m in s){//父節(jié)點(diǎn)TreeNode node = new TreeNode(m);//給treeview添加節(jié)點(diǎn)this.treeView1.Nodes.Add(node);//調(diào)用方法遞歸出磁盤的所有文件,并將父節(jié)點(diǎn)和路徑傳入 expendtree(m, node);}}catch { }}private void expendtree(string path, TreeNode tn){try{//獲取父節(jié)點(diǎn)目錄的子目錄string[] s1 = Directory.GetDirectories(path);//子節(jié)點(diǎn)TreeNode subnode = new TreeNode();//通過遍歷給傳進(jìn)來的父節(jié)點(diǎn)添加子節(jié)點(diǎn)foreach (string j in s1){subnode = new TreeNode(j);tn.Nodes.Add(subnode);//對(duì)文件夾不斷遞歸,得到所有文件 expendtree(j, subnode);}}catch { }}} }

分析以上代碼,造成打開慢的原因是一開始就加載所有數(shù)據(jù)到TreeView控件中來,為了提高效率,可以等選用選擇了相關(guān)的驅(qū)動(dòng)器對(duì)象再來加載相關(guān)的文件夾,這樣高效了很多。所以經(jīng)過修改,再添加多一個(gè)ListBox把文件也顯示出來。

View Code 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 WindowsFormsApplication2 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//顯示各邏輯磁盤string[] drivers = Directory.GetLogicalDrives();foreach (string driver in drivers){TreeNode node = new TreeNode(driver);treeView1.Nodes.Add(node);//不再預(yù)先遍歷文件夾// expendtree(driver, node); }}private void expendtree(string path, TreeNode tn){try{//遍歷指定的文件夾目錄string[] dirs = Directory.GetDirectories(path);foreach (string dir in dirs){TreeNode subnode = new TreeNode(dir);tn.Nodes.Add(subnode);//不再遍歷子文件夾// expendtree(dir, subnode); }}catch { }}private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){//選擇節(jié)點(diǎn)的信息TreeNode selnode = treeView1.SelectedNode;string selname = treeView1.SelectedNode.Text;//開始遍歷選定的節(jié)點(diǎn),并展開它 expendtree(selname, selnode);selnode.Expand();//加載選定節(jié)點(diǎn)文件夾的相關(guān)文件string[] files = Directory.GetFiles(selname);listBox1.Items.Clear();foreach (string file in files){listBox1.Items.Add(file);}}} }

分析以上代碼,看到文件夾顯示的都是完整路徑,這不是我們想要的,我們只需要顯示文件夾名就可以了,所以,需要再次修改。

?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 WindowsFormsApplication2
{
??? public partial class Form1 : Form
??? {
??????? public Form1()
??????? {
??????????? InitializeComponent();
??????? }

??????? private void Form1_Load(object sender, EventArgs e)
??????? {
??????????? //顯示各邏輯磁盤
??????????? string[] drivers = Directory.GetLogicalDrives();
??????????? foreach (string driver in drivers)
??????????? {
??????????????? TreeNode node = new TreeNode(driver);
??????????????? treeView1.Nodes.Add(node);
??????????? }

??????? }

??????? private void expendtree(string path, TreeNode tn)
??????? {
??????????? try
??????????? {
??????????????? //遍歷指定的文件夾目錄
??????????????? string[] dirs = Directory.GetDirectories(path);
??????????????? foreach (string dir in dirs)
??????????????? {?
??????????????????? //截取文件夾名,作節(jié)點(diǎn)名,不需要顯示完整路徑
????????????????? string? mdir = dir.Substring(dir.LastIndexOf("\\") + 1, dir.Length - dir.LastIndexOf("\\") - 1);
??????????????????? TreeNode subnode = new TreeNode(mdir);
??????????????????? tn.Nodes.Add(subnode);
??????????????? }
??????????? }
??????????? catch { }
??????? }

??????? private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
??????? {
??????????? //選擇節(jié)點(diǎn)的信息
??????????? TreeNode selnode = treeView1.SelectedNode;
????????? //? string selname = treeView1.SelectedNode.Text;
???????????
??????????? //修改國(guó)節(jié)點(diǎn)的完整路徑
??????????? string selname = selnode.FullPath;

??????????? //開始遍歷選定的節(jié)點(diǎn),并展開它
??????????? expendtree(selname, selnode);
??????????? selnode.Expand();

??????????? //加載選定節(jié)點(diǎn)文件夾的相關(guān)文件
??????????? string[] files = Directory.GetFiles(selname);
??????????? listBox1.Items.Clear();
??????????? foreach (string file in files)
??????????? {
??????????????? listBox1.Items.Add(file);
??????????? }
??????? }
??? }
}

?

?

?再次更改,呵呵,做成圖片瀏覽工具,添加文件到列表框時(shí),過濾圖片文件

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 WindowsFormsApplication2 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//顯示各邏輯磁盤string[] drivers = Directory.GetLogicalDrives();foreach (string driver in drivers){TreeNode node = new TreeNode(driver);treeView1.Nodes.Add(node);}}private void expendtree(string path, TreeNode tn){try{//遍歷指定的文件夾目錄string[] dirs = Directory.GetDirectories(path);foreach (string dir in dirs){ //截取文件夾名,作節(jié)點(diǎn)名,不需要顯示完整路徑string mdir = dir.Substring(dir.LastIndexOf("\\") + 1, dir.Length - dir.LastIndexOf("\\") - 1);TreeNode subnode = new TreeNode(mdir);tn.Nodes.Add(subnode);}}catch { }}private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){//選擇節(jié)點(diǎn)的信息TreeNode selnode = treeView1.SelectedNode;// string selname = treeView1.SelectedNode.Text;//修改國(guó)節(jié)點(diǎn)的完整路徑string selname = selnode.FullPath;//開始遍歷選定的節(jié)點(diǎn),并展開它expendtree(selname, selnode);selnode.Expand();//加載選定節(jié)點(diǎn)文件夾的相關(guān)文件string[] files = Directory.GetFiles(selname);listBox1.Items.Clear();foreach (string file in files){ //在加載文件時(shí),按擴(kuò)展名來過濾文件,只顯示jpg和bmp文件string mfile=file.Substring(file.Length-3,3);switch (mfile){ case "jpg":case "bmp":listBox1.Items.Add(file);break;default:break;}}}private void listBox1_Click(object sender, EventArgs e){//加載圖片if (listBox1.SelectedIndex > 0){string file = listBox1.SelectedItem.ToString();try{pictureBox1.Image = Image.FromFile(file);}catch{ }}}} }

?

?添加父節(jié)點(diǎn)及節(jié)點(diǎn)的狀態(tài)圖標(biāo),先給工程中添加ImageList控件,加載四個(gè)狀態(tài)圖標(biāo),

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 WindowsFormsApplication2 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//顯示各邏輯磁盤string[] drivers = Directory.GetLogicalDrives();foreach (string driver in drivers){TreeNode node = new TreeNode(driver);//邏輯磁盤圖標(biāo)兩個(gè)狀態(tài)不變node.ImageIndex = 1;node.SelectedImageIndex= 1;treeView1.Nodes.Add(node);}}private void expendtree(string path, TreeNode tn){try{//遍歷指定的文件夾目錄string[] dirs = Directory.GetDirectories(path);foreach (string dir in dirs){ //截取文件夾名,作節(jié)點(diǎn)名,不需要顯示完整路徑string mdir = dir.Substring(dir.LastIndexOf("\\") + 1, dir.Length - dir.LastIndexOf("\\") - 1);TreeNode subnode = new TreeNode(mdir);//文件夾圖標(biāo)兩個(gè)狀態(tài)有變化subnode.ImageIndex = 2;subnode.SelectedImageIndex = 3;tn.Nodes.Add(subnode);}}catch { }}private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){//選擇節(jié)點(diǎn)的信息TreeNode selnode = treeView1.SelectedNode;// string selname = treeView1.SelectedNode.Text;//修改國(guó)節(jié)點(diǎn)的完整路徑string selname = selnode.FullPath;//開始遍歷選定的節(jié)點(diǎn),并展開它expendtree(selname, selnode);selnode.Expand();try{//加載選定節(jié)點(diǎn)文件夾的相關(guān)文件string[] files = Directory.GetFiles(selname);listBox1.Items.Clear();foreach (string file in files){//在加載文件時(shí),按擴(kuò)展名來過濾文件,只顯示jpg和bmp文件string mfile = file.Substring(file.Length - 3, 3);switch (mfile){case "jpg":case "bmp":listBox1.Items.Add(file);break;default:break;}}}catch { }}private void listBox1_Click(object sender, EventArgs e){//加載圖片if (listBox1.SelectedIndex > 0){string file = listBox1.SelectedItem.ToString();try{pictureBox1.Image = Image.FromFile(file);}catch{ }}}} }

?

總結(jié)

以上是生活随笔為你收集整理的TreeView控件应用--访问文件或文件夹(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。