百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

2-2文件和目录类-C#文件流基础学习

bigegpt 2024-09-17 12:23 8 浏览

在C#的System.IO命名空间中,Directory类提供了一些用于目录操作的方法,包括目录的创建、删除、遍历等。以下是Directory类的一些常用方法:

  1. Exists(string path):检查指定路径的目录是否存在。
  2. Create(string path):创建一个新目录。
  3. Delete(string path):删除指定路径的目录及其所有内容。
  4. GetFiles(string path):返回指定路径下的所有文件,可以使用过滤器进行筛选。
  5. GetDirectories(string path):返回指定路径下的所有子目录。
  6. GetFileSystemEntries(string path):返回指定路径下的所有文件和目录。
  7. EnumerateFiles(string path):返回一个迭代器,用于遍历指定路径下的所有文件,可以使用过滤器进行筛选。
  8. EnumerateDirectories(string path):返回一个迭代器,用于遍历指定路径下的所有子目录。
  9. EnumerateFileSystemEntries(string path):返回一个迭代器,用于遍历指定路径下的所有文件和目录。

使用Directory类的方法时,需要传递一个目录路径作为参数。这些方法可以轻松地进行目录的创建、删除、遍历等操作。

Directory类案例练习-遍历驱动器上的文件和文件夹(可以理解为盘符)

完整示例代码:

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 GetDirAndFiles
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //获取所有磁盘,并显示在ComboBox中
        private void Form1_Load(object sender, EventArgs e)
        {
            string[] dirs = Directory.GetLogicalDrives();//获取计算上的逻辑驱动器的名称
            if (dirs.Length > 0)//如果有驱动器
            {
                for (int i = 0; i < dirs.Length; i++)//遍历驱动器
                {
                    comboBox1.Items.Add(dirs[i]);//将驱动名称添加到下拉项中
                }
            }
        }
        //选择驱动器
        private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            if (((ComboBox)sender).Text.Length > 0)//如果在下拉项中选择了值
            {
                treeView1.Nodes.Clear();//清空treeView1控件
                TreeNode TNode = new TreeNode();//实例化TreeNode
                //将驱动器下的文件夹及文件名称添加到treeView1控件上
                Folder_List(treeView1, ((ComboBox)sender).Text, TNode, 0);
            }
        }
        #region  显示文件夹下所有子文件夹及文件的名称
        /// <summary>
        /// 显示文件夹下所有子文件夹及文件的名称
        /// </summary>
        /// <param Sdir="string">文件夹的目录</param>
        /// <param TNode="TreeNode">节点</param>
        /// <param n="int">标识,判断当前是文件夹,还是文件</param>
        private void Folder_List(TreeView TV, string Sdir, TreeNode TNode, int n)
        {
            if (TNode.Nodes.Count > 0)//如果当前节点下有子节点
                if (TNode.Nodes[0].Text != "")//如果第一个子节点的文本为空
                    return;//退出本次操作
            if (TNode.Text == "")//如果当前节点的文本为空
                Sdir += "\\";//设置驱动器的根路径
            DirectoryInfo dir = new DirectoryInfo(Sdir);//实例化DirectoryInfo类
            try
            {
                if (!dir.Exists)//判断文件夹是否存在
                {
                    return;
                }
                DirectoryInfo dirD = dir as DirectoryInfo;//如果给定参数不是文件夹,则退出
                if (dirD == null)//如果文件夹是否为空
                {
                    TNode.Nodes.Clear();//清空当前节点
                    return;
                }
                else
                {
                    if (n == 0)//如果当前是文件夹
                    {
                        if (TNode.Text == "")//如果当前节点为空
                            TNode = TV.Nodes.Add(dirD.Name);//添加文件夹的名称
                        else
                        {
                            TNode.Nodes.Clear();//清空当前节点
                        }
                        TNode.Tag = 0;//设置文件夹的标识
                    }
                }
                FileSystemInfo[] files = dirD.GetFileSystemInfos();//获取文件夹中所有文件和文件夹
                //对单个FileSystemInfo进行判断,遍历文件和文件夹
                foreach (FileSystemInfo FSys in files)
                {
                    FileInfo file = FSys as FileInfo;//实例化FileInfo类
                    if (file != null)//如果是文件的话,将文件名添加到节点下
                    {
                        FileInfo SFInfo = new FileInfo(file.DirectoryName + "\\" + file.Name);//获取文件所在路径
                        TNode.Nodes.Add(file.Name);//添加文件名
                        TNode.Tag = 0;//设置文件标识
                    }
                    else//如果是文件夹
                    {
                        TreeNode TemNode = TNode.Nodes.Add(FSys.Name);//添加文件夹名称
                        TNode.Tag = 1;//设置文件夹标识
                        TemNode.Nodes.Add("");//在该文件夹的节点下添加一个空文件夹,表示文件夹下有子文件夹或文件
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }
        #endregion
        private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (((TreeView)sender).SelectedNode == null)//如当前节点为空
                return;
            //将指定目录下的文件夹及文件名称清加到treeView1控件的指定节点下
            Folder_List(treeView1, ((TreeView)sender).SelectedNode.FullPath.Replace("\\\\", "\\"),((TreeView)sender).SelectedNode, 0);
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {

        }
    }
}

相关推荐

Go语言泛型-泛型约束与实践(go1.7泛型)

来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...

golang总结(golang实战教程)

基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...

Go 官宣:新版 Protobuf API(go pro版本)

原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...

Golang开发的一些注意事项(一)(golang入门项目)

1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...

golang 托盘菜单应用及打开系统默认浏览器

之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...

golang标准库每日一库之 io/ioutil

一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...

文件类型更改器——GoLang 中的 CLI 工具

我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...

Go (Golang) 中的 Channels 简介(golang channel长度和容量)

这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...

Golang引入泛型:Go将Interface「」替换为“Any”

现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...

一文带你看懂Golang最新特性(golang2.0特性)

作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移

以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...

Golang使用grpc详解(golang gcc)

gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...

Etcd服务注册与发现封装实现--golang

服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

如何从 PHP 过渡到 Golang?(php转golang)

我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...