C#实现文件管理器

本例,完成的东东是一个文件管理器,Windows资源管理器山寨版。算是一个很简单的教程吧,不涉及数据库,只是做一个winform程序,如果要做成web形式的,基本相同,只需要作小部分地修改。当然,这个文件管理器还存在很多不足,有待于功能和界面上的完善。本例主要是提供给那些和我一样是菜菜的爱好者进行学习,高手呢,可以飘过,当然,能留下您宝贵的指导是最好的,嘿嘿。

下面详细介绍这个小程序能实现的功能:
1.包括TXET文本的新建、复制、粘贴、删除和撤销等文件操作。
2.对文本字体的操作:粗体、下划线和斜体。
3.包括文本夹的新建、复制、粘贴、删除等文件夹操作。
4.五种查看方式:列表、小图标、大图标、标题和详细。

软件界面

文件管理器主界面


进入驱动器D盘后的界面


新建文件界面


新建文件夹界面


文本文档界面

System.IO
System.IO命名空间很重要,它包含了许多的类,以便让托管应用程序可以通过同步或异步方式提供文本I/O以及其他形式的输入和输出方式,从而操作文件系统或流的输入和输出操作。System.IO的命名空间相当庞大,在本例中,主要用到以下几个方面:

1.File类:它提供了打开,创建,复制,移动,重命名文件以及读写文件属性的静态方法.
2.Directory类:它为目录提供编程接口,使应用程序可以通过简单的方法来创建,删除目录.
3.FileStream类:它允许将文件作为流访问,实现标准的输出,输入操作,可随机的访问文件内容.
4.StreamReader与StreamWriter类:它们支持对文本的读写操作,让应用程序可以访问文件或信息流.

下面,简要说一下在例子中用到的几个控件及它们的属性。

ListView
通过ListView控件,可以在标准视图对话框中进行各种操作(查看,打开文件等)。本例中,主要用到以下功能:
1.View:  a LargeIcon:所有选项都在其旁边显示一个大图标和一个标签。
             b SmallIcon:所有选项都在其旁边显示一个小图标和一个标签。
             c List:只显示一列,该列可以包含一个图标和一个标签。
             d Details:可以显示任意数量的列,只有第一列可以包含图像。
2.SelectedItems:这个属性包含了选中选项的集合。
3.MultiSelect:这个属性设置为true,用户可以选择多个选项。
4.LargeImageList:这个属性包含ImageList,其中ImageList包含ListView中要使用的图像。当View属性为LargeIcon时,可以使用图像。
5.SmallImageList:这个属性包含ImageList,其中ImageList包含ListView中要使用的图像。当View属性为SmallIcon时,可以使用图像。

ImageList
ImageList 控件包含 ListImage 对象的集合,该集合中的每个对象都可以通过其索引或关键字被引用。ImageList 控件不能独立使用,只是作为一个便于向其它控件提供图象的资料中心。
语法:ImageList
ImageList 控件的作用象图像的储藏室,同时,它需要第二个控件显示所储存的图像。第二个控件可以是任何能显示图像 Picture 对象的控件,也可以是特别设计的、用于绑定 ImageList 控件的 Windows 通用控件之一。这些控件包括ListView、ToolBar、TabStrip、Header、ImageCombo、和 TreeView 控件。为了与这些控件一同使用 ImageList,必须通过一个适当的属性将特定的 ImageList控件绑定到第二个控件。对于 ListView 控件,必须设置其 Icons 和 SmallIcons 属性为 ImageList 控件。对于 TreeView、TabStrip、ImageCombo、和 Toolbar 控件,必须设置 ImageList 属性为 ImageList 控件。
在设计时,可以用“ImageList 控件属性”对话框的“图像”选项卡来添加图象。在运行时,可以用 Add 方法给 ListImages 集合添加图象。

ContextMenuStrip
ContextMenuStrip 控件提供了与某个控件关联的快捷菜单。也就是说通过这个控件可以方便的实现在别的控件上弹出右键快捷菜单。
例子:
1、先添加一个ContextMenuStrip 控件到Form上
2、设置目标控件(如窗体、文本框等)的ContextMenuStrip属性,指向你刚才添加的ContextMenuStrip 控件。这样就实现了两者的关联。
3、动态将一些菜单项添加到 ContextMenuStrip 控件中,如:
//上下文菜单项
ContextMenuStrip1.Items.Add(msEditNew);
ContextMenuStrip1.Items.Add(msEditBar1);
ContextMenuStrip1.Items.Add(msEditCut);
ContextMenuStrip1.Items.Add(msEditPaste);
ContextMenuStrip1.Items.Add(msEditDelete);
ContextMenuStrip1.Items.Add(msEditBar2);
这样就OK了,你在目标控件上按右键时将弹出快捷菜单。

通过上面的介绍,大家应该能明白本例中要实现的效果,需要用到的控件及重要属性等,下面,就可以切入正题,如何通过编程,实现我们上面提到的功能。呵呵,再提一点,也是比较重要的:C#是一种面向对象的编程语言,因此,在编程之前我们就要有“面向对象编程”的思想,在编程的过程中贯彻这样的思想,
同时,这也是符合目前公司里的编程思想。还有一点,尽量做到代码的规范,可以为以后再次开发或别人阅读我们程序起到简便明了的作用。

主要有两个类:Folder.cs和Txt.cs,分别是对文件和文本的相关操作。类里的方法,我都做了详尽的注释,如果还有什么不明白,可以联系我。

Folder.cs

CODE:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace FileManager.Class
{
    public class Folder
    {
        /// <summary>
        /// 新建文件夹
        /// </summary>
        /// <param name="filename">文件夹名</param>
        /// <param name="path">文件夹路径</param>
        public static void NewFolder(string foldername, string path)
        {
            foldername.Trim();
            //如果输入信息为空,提示
            if (foldername == "")
            {
                MessageBox.Show("目录名不能为空");
                return;
            }
            else
            {
                string FullName = path + "//" + foldername;
                //如果该文件以及存在
                if (Directory.Exists(FullName))
                {
                    MessageBox.Show("该目录已经存在,请重命名");
                    return;
                }
                else
                {
                    //新建文件夹
                    Directory.CreateDirectory(FullName);
                }
            }
        }

        /// <summary>
        /// 新建文件夹(Enter键触发)
        /// </summary>
        /// <param name="filename">文件夹名</param>
        /// <param name="path">文件夹路径</param>
        public static void Enter(string foldername, string path)
        {
            foldername.Trim();
            if (foldername == "")
            {
                MessageBox.Show("目录名不能为空!");
                return;
            }
            else if (Directory.Exists(path + "//" + foldername))
            {
                MessageBox.Show("该目录以及存在,请重新命名");
                return;
            }
            else
            {
                Directory.CreateDirectory(path + "//" + foldername);
            }

        }

        /// <summary>
        /// //获取文件夹名,截取“/”
        /// </summary>
        /// <param name="DirectoryPath">文件夹完整路径</param>
        /// <returns></returns>
        internal static int DirectoryName(string DirectoryPath)
        {
            int j = 0;
            char[] c = DirectoryPath.ToCharArray();
            for (int i = c.Length - 1; i >= 0; i--)//从后面截取
            {
                j = i;
                if (c[i].ToString() == "//")
                {
                    break;//遇"/"调处,并返回"/"的位置
                }
            }
            return j + 1;
        }
        /// <summary>
        /// 在指定目录下新建一个文件夹
        /// </summary>
        /// <param name="path"></param>
        /// <param name="name"></param>
        public static void CreateDir(string path, string name)
        {
            Directory.CreateDirectory(path + "//" + name);
        }

        /// <summary>
        /// 复制文件
        /// </summary>
        /// <param name="oldDir">原文件所在文件夹路径</param>
        /// <param name="Name">文件名</param>
        /// <param name="newDir">新文件夹路径</param>
        public static void CopyFile(string oldDir, string Name, string newDir)
        {
            File.Copy(oldDir + "//" + Name, newDir + "//" + Name);
        }

        /// <summary>
        /// 复制文件
        /// </summary>
        /// <param name="oldDir">原文件所在文件夹路径</param>
        /// <param name="newDir">新文件夹路径</param>
        public static void CopyFile(string oldDir, string newDir)
        {
            string name = oldDir.Substring(DirectoryName(oldDir));
            File.Copy(oldDir, newDir + "//" + name);
        }

        /// <summary>
        /// 删除指定文件夹
        /// </summary>
        /// <param name="strDir">文件夹完整路径</param>
        /// <param name="recursive">是否删除文件夹子项</param>
        public static void DeleteFolder(string strDir, bool recursive)
        {
            Directory.Delete(strDir, recursive);
        }

        /// <summary>
        /// 返回指定路径的DirectoryInfo
        /// </summary>
        /// <returns></returns>
        public static DirectoryInfo GetDir(string path)
        {
            return new DirectoryInfo(path);
        }
    }
}
Txt.cs

CODE:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing;

namespace FileManager.Class
{
    public class Txt
    {
        public Txt()
        {

        }
        /// <summary>
        /// 新建文件
        /// </summary>
        /// <param name="filename">文件名</param>
        /// <param name="path">文件路径</param>
        public static void NewFile(string filename,string path)
        {
            filename.Trim();
            if (filename == "")
            {
                MessageBox.Show("文件名不能为空~!");
            }
            else
            {
                if (File.Exists(path + "//" + filename+".txt"))
                {
                    MessageBox.Show("该文件名已经存在,请重命名");
                }
                else
                {
                    string FullName = path + "//" + filename + ".txt";   //获得文件完整信息
                    StreamWriter Sw = File.CreateText(FullName);
                }
            }
        }
        /// <summary>
        /// 新建文件(Enter键触发)
        /// </summary>
        /// <param name="filename">文件名</param>
        /// <param name="path">文件路径</param>
        public static void Enter(string filename, string path)
        {
            filename.Trim();
            if (filename == "")
            {
                MessageBox.Show("文件名不能为空~!");
            }
            else
            {
                if (File.Exists(path + "//" + filename+".txt"))
                {
                    MessageBox.Show("该文件名已经存在,请重命名");
                }
                else
                {
                    string FullName = path + "//" + filename + ".txt";   //获得文件完整信息
                    StreamWriter Sw = File.CreateText(FullName);
                }
            }
        }
        /// <summary>
        /// 读取显示
        /// </summary>
        /// <param name="filename">文本文件名</param>
        /// <param name="contents">内容</param>
        public static string Display(string filename)
        {//读取显示
            try
            {
                string contents;
                FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);   //读出所打开的文本文件
                StreamReader reader = new StreamReader(fs);     //实例化一个streamreader
                contents = reader.ReadToEnd();           //将数据显示
                fs.Close();
                return contents;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return "";
            }
        }
        /// <summary>
        /// 打开
        /// </summary>
        /// <param name="ofd">打开对话框</param>
        /// <param name="fullname">文本文件名</param>
        /// <param name="contents">内容</param>
        public static void Open(OpenFileDialog ofd,string fullname,string contents)
        {//打开文本
            try
            {
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    string fileName = ofd.FileName;     //文件名
                    FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                    StreamReader reader = new StreamReader(fs);
                    fullname = fileName;
                    contents = reader.ReadToEnd();
                    fs.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="fullname">文本文件名</param>
        /// <param name="contents">内容</param>
        public static void Save(string fullname,string contents)
        {//保存
            try
            {
                StreamWriter writer = new StreamWriter(fullname);
                writer.Write(contents);      //用write()方法把txtContent的数据写入文件
                writer.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// 另存为
        /// </summary>
        /// <param name="sfd">保存对话框</param>
        /// <param name="contents">内容</param>
        public static void SaveAs(SaveFileDialog sfd,string contents)
        {
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                string fileName = sfd.FileName;
                try
                {
                    Stream stream = File.OpenWrite(fileName);
                    using (StreamWriter writer = new StreamWriter(stream))
                    {
                        writer.Write(contents);
                        writer.Close();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        /// <summary>
        /// 粗体
        /// </summary>
        /// <param name="rtb"></param>
        public static void Bold(RichTextBox rtb)
        {
            Font newFont = new Font(rtb.SelectionFont,
                        (rtb.SelectionFont.Bold ?
                         rtb.SelectionFont.Style & ~FontStyle.Bold :
                         rtb.SelectionFont.Style | FontStyle.Bold));
            rtb.SelectionFont = newFont;
        }
        /// <summary>
        /// 斜体
        /// </summary>
        /// <param name="rtb"></param>
        public static void Italic(RichTextBox rtb)
        {
            Font newFont = new Font(rtb.SelectionFont,
           (rtb.SelectionFont.Italic ?
            rtb.SelectionFont.Style & ~FontStyle.Italic :
            rtb.SelectionFont.Style | FontStyle.Italic));
            rtb.SelectionFont = newFont;
        }
        /// <summary>
        /// 下划线
        /// </summary>
        /// <param name="rtb"></param>
        public static void Underline(RichTextBox rtb)
        {
            Font newFont = new Font(rtb.SelectionFont,
           (rtb.SelectionFont.Underline ?
            rtb.SelectionFont.Style & ~FontStyle.Underline :
            rtb.SelectionFont.Style | FontStyle.Underline));
            rtb.SelectionFont = newFont;
        }
        /// <summary>
        /// 复制
        /// </summary>
        /// <param name="rtb"></param>
        public static void Copy(RichTextBox rtb)
        {
            if (rtb.SelectedText.Equals(""))
                return;
            Clipboard.SetDataObject(rtb.SelectedText, true);
        }
        /// <summary>
        /// 剪切
        /// </summary>
        /// <param name="rtb"></param>
        public static void Cut(RichTextBox rtb)
        {
            if (rtb.SelectedText.Length > 0)
            {
                try
                {
                    rtb.Cut();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        /// <summary>
        /// 粘贴
        /// </summary>
        /// <param name="rtb"></param>
        public static void Paste(RichTextBox rtb)
        {
            rtb.Paste();
        }
        /// <summary>
        /// 退出
        /// </summary>
        /// <param name="fullname">文本文件全名</param>
        /// <param name="contents">内容</param>
        public static void Exit(string fullname,string contents)
        {
            if (MessageBox.Show("      是否保存文件",

"提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                try
                {
                    StreamWriter writer = new StreamWriter(fullname);
                    writer.Write(contents);      //用write()方法把txtContent的数据写入文件
                    writer.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        /// <summary>
        /// 在指定目录新建一个文本文件
        /// </summary>
        /// <param name="path"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static StreamWriter CreateText(string path, string name)
        {
            return File.CreateText(path + "//" + name);
        }

        /// <summary>
        /// 删除指定文件
        /// </summary>
        /// <param name="strFile">文件完整路径</param>
        public static void DeleteFile(string strFile)
        {
            File.Delete(strFile);
        }
    }
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 实现了对文件文件夹的复制、粘贴、剪切、删除功能; 2.实现了对文件夹的双击打开、对多种类型的文件的双击打开查看功能; 3.实现了主窗体左边驱动器树形视图(显示各驱动器及内部各文件夹列表)、右边文件列表视图(显示当前文件夹下所包含的文件和下一级文件夹)的显示,以及两者的联动显示。左右窗体间设有分隔条,拖动可改变左右窗体大小。文件列表视图中包含了名称、修改日期、类型、大小四个字段; 4.实现了在主窗体右边文件列表视图进行右键时弹出的上下文菜单,该菜单会根据当前是否选中某一文件项而将菜单项加以调整。例如,右键时,若当前没有选中文件项,则可以显示出“查看”、“新建文件”、“新建文件夹”等菜单项;但是若当前选中了某一文件项,则可以显示出“复制”、“剪切”、“重命名”等菜单项; 5. 实现了主窗体地址栏、状态栏的显示和隐藏可以由用户控制; 6. 实现文件文件夹属性的查看; 7.实现了对当前计算机的进程、线程简单管理功能; 8. 实现了在当前路径下“返回上一级目录”的功能; 9. 实现了在主窗体上方地址栏直接输入文件路径,然后直接回车查看该路径下的文件列表的功能; 10. 实现了对当前计算机文件文件夹的监控功能。可定制化程度较高,既可以实现对特定路径的监控,也可以实现对具体磁盘驱动器的监控,甚至是全盘监控。监控过程中的日志均高亮显示在监控窗口中,也支持将日志保存到特定路径; 11. 将重命名功能加以改进,实现了类似windows的”选定->再单击->出现重命名状态->进行重命名“功能; 12. 实现了对当前计算机的文件/文件夹的权限管理功能。权限管理包括:完全控制、修改、读取和执行、列出文件夹内容、读取、写入共6个模块; 13.实现了”最近访问“的功能,用户可以在该功能区找到最近使用的文件,并双击打开查看; 14.实现了新建文件功能,用户可以根据自己的需要在弹出的窗口中输入文件的全名(包括“文件名+拓展名”),从而新建各种类型的文件; 15.实现了用户在主窗体右边文件列表中的历史访问路径的前进、后退功能; 16.实现了对文件/文件夹的快速搜索功能(基于多线程)。使用时先在地址栏输入特定文件路径(或者直接进入特定文件路径),然后直接在主窗体上方搜索框中输入你所要搜索的文件名或关键字,最后回车即可在当前文件列表区中显示出搜索到的结果,搜索到的文件/文件夹支持直接双击查看或编辑。实测时,比windows自带的文件/文件夹搜索功能快一点。 ....... 支持开源精神,需要详细了解这个Demo的朋友可以移步: https://github.com/Yuziquan/MyFileManager 欢迎star~~~
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值