C# 递归方法 加载 文件-----类似于 资源管理器

刚毕业,参加工作没多久,但是一直想写些  有关技术方面的文章,一来 ,为了 复习,二来,希望大家相互交流,相互指点,也希望 对初学者有所 帮助,

由于本人技术水平 有限,难免会出错,请见谅!

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.Windows.Forms;

using System.IO;   //添加与文件有关的程序集

namespace FileList
{
public partial class Form1 : Form
{
protected string[] filePaths;   //声明 要加载的 文件路径 字符串//声明要 递归的文件的 路径数组
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
filePaths = new string[] { @"E:\", @"F:\",@"C:\", @"D:\" };  //实例化文件路径
foreach (string filePath in filePaths)
{
GetParent(filePath);  //遍历文件路径 并 获取 根节点
}
}
/// <summary>
/// 获取 根节点
/// </summary>
/// <param name="textNode"></param>
public void GetParent(string textNode)
{
TreeNode node1 = new TreeNode(textNode);
node1.Tag = textNode;
treeList.Nodes.Add(node1); //将根节点加入到 树形控件中
LoadTree(textNode, node1);//根据文件路径逐个 递归加载 所有的文件

}

#region 加载目录下 所有子目录
/// <summary>
/// 加载目录下 所有子目录
/// </summary>
protected void LoadTree(string strPath, TreeNode node)
{
try
{

string[] strDirs = Directory.GetDirectories(strPath);//根据文件路径 加载里面的所有的 目录
foreach (string dir in strDirs)  //递归 目录数组
{
TreeNode node1 = new TreeNode(Path.GetFileName(dir)); //通过目录获取 文件名,并添加到 树形节点
node1.Tag = dir;// 将目录存入 node的Tag属性中
if (node == null)
{

treeList.Nodes.Add(node1);
}
else
{
node.Nodes.Add(node1);
}
if (Directory.GetDirectories(dir).Length > 0)
{
LoadTree(dir, node1);
}
}

}
catch (Exception ex)
{
}
#endregion

//选中节点之后 促发的 事件。
private void treeList_AfterSelect(object sender, TreeViewEventArgs e)
{
listFile.Items.Clear();
if (treeList.SelectedNode.Tag != null)
{
string selPath = treeList.SelectedNode.Tag.ToString();

string[] files = Directory.GetFiles(selPath);
ListViewItem item = null;
FileInfo infor = null;
foreach (string file in files)
{
infor = new FileInfo(file);
item = new ListViewItem();
item.Text = Path.GetFileName(file);
item.Tag = file;

item.SubItems.Add(infor.Length.ToString()+"KB");//大小
item.SubItems.Add(infor.CreationTime.ToString());//创建时间
string [] arr=infor.Name.Split(‘.‘);
item.SubItems.Add(arr[arr.Length-1].ToString());

listFile.Items.Add(item);

}
}

}

private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
string path = listFile.SelectedItems[0].Tag.ToString();

if(MessageBox.Show("是否要删除?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==System.Windows.Forms.DialogResult.Yes)
{

File.Delete(path);
listFile.SelectedItems[0].Remove();
}
}

private void 重命名ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.listFile.FullRowSelect = false;
listFile.LabelEdit = true;
}

private void 打开文件ToolStripMenuItem_Click(object sender, EventArgs e)
{

try
{
string paths = listFile.SelectedItems[0].Tag.ToString();
string[] type = paths.Split(‘.‘);
if (type[type.Length - 1].ToString() == "txt")
{

string path = listFile.SelectedItems[0].Tag.ToString();
FileStream stream = new FileStream(path, FileMode.Open);
byte[] buffer = new byte[1024 * 1024];
stream.Read(buffer, 0, buffer.Length);
string text = Encoding.Default.GetString(buffer);
ContentBox.Text = text;
stream.Dispose();
}
else
{
MessageBox.Show("目前只能打开txt文件");
}
}
catch (Exception ex)
{

MessageBox.Show(ex.Message);
}
}

private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
{
string path = listFile.SelectedItems[0].Tag.ToString();
FileStream stream = new FileStream(path, FileMode.Create);

string content = ContentBox.Text;
byte[] buffer = Encoding.Default.GetBytes(content);
stream.Write(buffer, 0, buffer.Length);
stream.Dispose();
MessageBox.Show("保存成功!");

}

时间: 2024-10-21 20:17:14

C# 递归方法 加载 文件-----类似于 资源管理器的相关文章

15.资源加载器,根据配置文件自动加载文件

前言 以前我想自己写一个加载器,用的时候加载,不用的时候再去掉,结果发现这种方式可能因为资源不统一在安卓上可能出现问题,所以搜集资料,弄成根据配置文件加载 思路 设定两个配置文件,screen,res,不同场景对应不同的screen,不同screen使用的资源为res,当切换的screen的res相同时,不对资源处理,直接切换,否则进入load场景等待资源加载和卸载,然后再跳转场景 下图为场景screen配置文件和资源res配置文件,screen配置了加载的背景图(bgImage),随后做配置化

Keil sct分散加载文件

首先介绍几个概念: 1.ARM映像文件 ARM映像文件是一个层次性结构的文件,其中包含了域(region).输出段(output section)和输入段(input section).各部分关系如下: 一个映像文件由一个或多个域组成 每个域包含一个或多个输出段 每个输出段包含一个或多个输入段 各输入段包含了目标文件中的代码和数据 输入段中包含了4类内容:代码.已经初始化的数据.未经初始化的存储区域.内容初始化成0的存储区域.每个输入段有相应的属性,可以为只读的(RO).可读写的(RW)以及初始

powershell-无法加载文件,因为在此系统中禁止执行脚本

写了一个powershell脚本测试脚本,结果执行的时候报错 $a=Get-Content C:\script.txt | select-string -pattern "ora"     if ( $a -eq  $null )     {                 write-host "error"      }     else     {          write-host "OK"      }  PS D:\> .\

链接加载文件gcc __attribute__ section

在阅读源代码的过程中,发现一个头文件有引用: /** The address of the first device table entry. */ extern device_t devices[]; /** The address after the last device table entry. */ extern device_t devices_end[]; /** The address of the first "driver_t". */ extern driver_

PowerShell 无法加载文件ps1,因为在此系统中禁止执行脚本

直接运行powershell时提示“无法加载文件ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing". 主要是由于没有权限执行脚本. 运行get-help about_signing 提示了解执行策略输入 get-executionpolicy 显示 Restricted 即不允许执行任何脚本. 通过命令 get-help set-executionpolicy 可知有以下执行策略:<Unrestricted> | &l

安装SQL2008时遇到&quot;未能加载文件或&quot;file:///d:microsoft..sql.chainer.packagedata.dll&quot;或它的某个依赖项

安装SQL2008时遇到"未能加载文件或"file:///d:microsoft..sql.chainer.packagedata.dll"或它的某个依赖项,如下图所示 原因:SQL2008的安装路径过长. 解决:把SQL2008放到D盘或者E盘的根目录下再安装.

使用PSR-4配合composer autoload 自动加载文件夹

require 文件很麻烦,使用PSR-4搭配composer一次加载,终生受用. 感觉类似java中的import了,自己先记录一下最近理解的. 用composer管理自己的包吧 安装composer 这个不多赘述 英文版教程 中文版教程 PSR-4规范 PSR-4-autoloader 构建项目目录 |-project ? |-src ? |-View.php ? |-app ? |-Tools.php |-composer.json 上面路径的View.php在project/src/Vi

webpack : 无法加载文件 D:\nodejs\node_global\webpack.ps1,因为在此系统上禁止运行脚本。

通过vs code 运行webpack进行打包时,报错webpack : 无法加载文件 D:\nodejs\node_global\webpack.ps1,因为在此系统上禁止运行脚本. 解决方案: 以管理员身份运行vs code 执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的 执行:set-ExecutionPolicy RemoteSigned 这时再执行get-ExecutionPolicy,就显示RemoteSigned 此时发现再进行打包就没有问

无法加载文件 C:\Users\huangshimin\AppData\Roaming\npm\wechat-terminal.ps1,因为在此系统上禁止运行脚本

在Windows powershell上运行脚本失败:提示信息“无法加载文件 C:\Users\huangshimin\AppData\Roaming\npm\wechat-terminal.ps1,因为在此系统上禁止运行脚本”,(需要以管理员身份运行)参考:https://blog.csdn.net/hl971115/article/details/102078132 原文地址:https://www.cnblogs.com/bneglect/p/12617879.html