熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#實現文件管理器—by henryqin

2013-11-13 09:53:02  來源: .NET編程 

  在教程中我會把需要特別注意的東東寫出來所以估計要寫的內容還是比較多但由於最近幾天比較忙哈我可能會分幾天時間把教程補充完整謝謝!

  本例完成的東東是一個文件管理器Windows資源管理器山寨版算是一個很簡單的教程吧不涉及數據庫只是做一個winform程序如果要做成web形式的基本相同只需要作小部分地修改當然這個文件管理器還存在很多不足有待於功能和界面上的完善本例主要是提供給那些和我一樣是菜菜的愛好者進行學習高手呢可以飄過當然能留下您寶貴的指導是最好的嘿嘿

  下面詳細介紹這個小程序能實現的功能
包括TXET文本的新建復制粘貼刪除和撤銷等文件操作
對文本字體的操作:粗體下劃線和斜體
包括文本夾的新建復制粘貼刪除等文件夾操作
五種查看方式:列表小圖標大圖標標題和詳細

  軟件界面

文件管理器主界面


進入驅動器D盤後的界面


新建文件界面


新建文件夾界面


文本文檔界面

  SystemIO
SystemIO命名空間很重要它包含了許多的類以便讓托管應用程序可以通過同步或異步方式提供文本I/O以及其他形式的輸入和輸出方式從而操作文件系統或流的輸入和輸出操作SystemIO的命名空間相當龐大在本例中主要用到以下幾個方面

  File類:它提供了打開創建復制移動重命名文件以及讀寫文件屬性的靜態方法
Directory類:它為目錄提供編程接口使應用程序可以通過簡單的方法來創建刪除目錄
FileStream類:它允許將文件作為流訪問實現標准的輸出輸入操作可隨機的訪問文件內容
StreamReader與StreamWriter類:它們支持對文本的讀寫操作讓應用程序可以訪問文件或信息流

  下面簡要說一下在例子中用到的幾個控件及它們的屬性

  ListView
通過ListView控件可以在標准視圖對話框中進行各種操作(查看打開文件等)本例中主要用到以下功能
View:  a LargeIcon:所有選項都在其旁邊顯示一個大圖標和一個標簽
             b SmallIcon:所有選項都在其旁邊顯示一個小圖標和一個標簽
             c List:只顯示一列該列可以包含一個圖標和一個標簽
             d Details:可以顯示任意數量的列只有第一列可以包含圖像
SelectedItems:這個屬性包含了選中選項的集合
MultiSelect:這個屬性設置為true用戶可以選擇多個選項
LargeImageList:這個屬性包含ImageList其中ImageList包含ListView中要使用的圖像當View屬性為LargeIcon時可以使用圖像
SmallImageList:這個屬性包含ImageList其中ImageList包含ListView中要使用的圖像當View屬性為SmallIcon時可以使用圖像

  ImageList
ImageList 控件包含 ListImage 對象的集合該集合中的每個對象都可以通過其索引或關鍵字被引用ImageList 控件不能獨立使用只是作為一個便於向其它控件提供圖象的資料中心
語法ImageList
ImageList 控件的作用象圖像的儲藏室同時它需要第二個控件顯示所儲存的圖像第二個控件可以是任何能顯示圖像 Picture 對象的控件也可以是特別設計的用於綁定 ImageList 控件的 Windows 通用控件之一這些控件包括ListViewToolBarTabStripHeaderImageCombo和 TreeView 控件為了與這些控件一同使用 ImageList必須通過一個適當的屬性將特定的 ImageList控件綁定到第二個控件對於 ListView 控件必須設置其 Icons 和 SmallIcons 屬性為 ImageList 控件對於 TreeViewTabStripImageCombo和 Toolbar 控件必須設置 ImageList 屬性為 ImageList 控件
在設計時可以用ImageList 控件屬性對話框的圖像選項卡來添加圖象在運行時可以用 Add 方法給 ListImages 集合添加圖象

  ContextMenuStrip
ContextMenuStrip 控件提供了與某個控件關聯的快捷菜單也就是說通過這個控件可以方便的實現在別的控件上彈出右鍵快捷菜單
例子
先添加一個ContextMenuStrip 控件到Form上
設置目標控件(如窗體文本框等)的ContextMenuStrip屬性指向你剛才添加的ContextMenuStrip 控件這樣就實現了兩者的關聯
動態將一些菜單項添加到 ContextMenuStrip 控件中
//上下文菜單項
ContextMenuStripItemsAdd(msEditNew);
ContextMenuStripItemsAdd(msEditBar);
ContextMenuStripItemsAdd(msEditCut);
ContextMenuStripItemsAdd(msEditPaste);
ContextMenuStripItemsAdd(msEditDelete);
ContextMenuStripItemsAdd(msEditBar);
這樣就OK了你在目標控件上按右鍵時將彈出快捷菜單

  通過上面的介紹大家應該能明白本例中要實現的效果需要用到的控件及重要屬性等下面就可以切入正題如何通過編程實現我們上面提到的功能呵呵再提一點也是比較重要的C#是一種面向對象的編程語言因此在編程之前我們就要有面向對象編程的思想在編程的過程中貫徹這樣的思想
同時這也是符合目前公司裡的編程思想還有一點盡量做到代碼的規范可以為以後再次開發或別人閱讀我們程序起到簡便明了的作用

  主要有兩個類Foldercs和Txtcs分別是對文件和文本的相關操作類裡的方法我都做了詳盡的注釋如果還有什麼不明白可以聯系我

  Foldercs

  CODE:

  using System;
using SystemCollectionsGeneric;
using SystemText;
using SystemWindowsForms;
using SystemIO;

  namespace FileManagerClass
{
    public class Folder
    {
        /// <summary>
        /// 新建文件夾
        /// </summary>
        /// <param name=filename>文件夾名</param>
        /// <param name=path>文件夾路徑</param>
        public static void NewFolder(string foldername string path)
        {
            foldernameTrim();
            //如果輸入信息為空提示
            if (foldername == )
            {
                MessageBoxShow(目錄名不能為空);
                return;
            }
            else
            {
                string FullName = path + \\ + foldername;
                //如果該文件以及存在
                if (DirectoryExists(FullName))
                {
                    MessageBoxShow(該目錄已經存在請重命名);
                    return;
                }
                else
                {
                    //新建文件夾
                    DirectoryCreateDirectory(FullName);
                }
            }
        }

  /// <summary>
        /// 新建文件夾(Enter鍵觸發)
        /// </summary>
        /// <param name=filename>文件夾名</param>
        /// <param name=path>文件夾路徑</param>
        public static void Enter(string foldername string path)
        {
            foldernameTrim();
            if (foldername == )
            {
                MessageBoxShow(目錄名不能為空!);
                return;
            }
            else if (DirectoryExists(path + \\ + foldername))
            {
                MessageBoxShow(該目錄以及存在請重新命名);
                return;
            }
            else
            {
                DirectoryCreateDirectory(path + \\ + foldername);
            }

  }

  /// <summary>
        /// //獲取文件夾名

  截取\
        /// </summary>
        /// <param name=DirectoryPath>文件夾完整路徑</param>
        /// <returns></returns>
        internal static int DirectoryName(string DirectoryPath)
        {
            int j = ;
            char[] c = DirectoryPathToCharArray();
            for (int i = cLength ; i >= ; i)//從後面截取
            {
                j = i;
                if (c[i]ToString() == \\)
                {
                    break;//遇\調處並返回\的位置
                }
            }
            return j + ;
        }
        /// <summary>
        /// 在指定目錄下新建一個文件夾
        /// </summary>
        /// <param name=path></param>
        /// <param name=name></param>
        public static void CreateDir(string path string name)
        {
            DirectoryCreateDirectory(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)
        {
            FileCopy(oldDir + \\ + Name newDir + \\ + Name);
        }

  /// <summary>
        /// 復制文件
        /// </summary>
        /// <param name=oldDir>原文件所在文件夾路徑</param>
        /// <param name=newDir>新文件夾路徑</param>
        public static void CopyFile(string oldDir string newDir)
        {
            string name = oldDirSubstring(DirectoryName(oldDir));
            FileCopy(oldDir newDir + \\ + name);
        }

  /// <summary>
        /// 刪除指定文件夾
        /// </summary>
        /// <param name=strDir>文件夾完整路徑</param>
        /// <param name=recursive>是否刪除文件夾子項</param>
        public static void DeleteFolder(string strDir bool recursive)
        {
            DirectoryDelete(strDir recursive);
        }

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

  CODE:

  using System;
using SystemCollectionsGeneric;
using SystemText;
using SystemWindowsForms;
using SystemIO;
using SystemDrawing;

  namespace FileManagerClass
{
    public class Txt
    {
        public Txt()
        {

  }
        /// <summary>
        /// 新建文件
        /// </summary>
        /// <param name=filename>文件名</param>
        /// <param name=path>文件路徑</param>
        public static void NewFile(string filenamestring path)
        {
            filenameTrim();
            if (filename == )
            {
                MessageBoxShow(文件名不能為空~!);
            }
            else
            {
                if (FileExists(path + \\ + filename+txt))
                {
                    MessageBoxShow(該文件名已經存在請重命名);
                }
                else
                {
                    string FullName = path + \\ + filename + txt;   //獲得文件完整信息
                    StreamWriter Sw = FileCreateText(FullName);
                }
            }
        }
        /// <summary>
        /// 新建文件(Enter鍵觸發)
        /// </summary>
        /// <param name=filename>文件名</param>
        /// <param name=path>文件路徑</param>
        public static void Enter(string filename string path)
        {
            filenameTrim();
            if (filename == )
            {
                MessageBoxShow(文件名不能為空~!);
            }
            else
            {
                if (FileExists(path + \\ + filename+txt))
                {
                    MessageBoxShow(該文件名已經存在請重命名);
                }
                else
                {
                    string FullName = path + \\ + filename + txt;   //獲得文件完整信息
                    StreamWriter Sw = FileCreateText(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 FileModeOpen FileAccessRead);   //讀出所打開的文本文件
                StreamReader reader = new StreamReader(fs);     //實例化一個streamreader
                contents = readerReadToEnd();           //將數據顯示
                fsClose();
                return contents;
            }
            catch (Exception ex)
            {
                MessageBoxShow(exMessage);
                return ;
            }
        }
        /// <summary>
        /// 打開
        /// </summary>
        /// <param name=ofd>打開對話框</param>
        /// <param name=fullname>文本文件名</param>
        /// <param name=contents>內容</param>
        public static void Open(OpenFileDialog ofdstring fullnamestring contents)
        {//打開文本
            try
            {
                if (ofdShowDialog() == DialogResultOK)
                {
                    string fileName = ofdFileName;     //文件名
                    FileStream fs = new FileStream(fileName FileModeOpen FileAccessRead);
                    StreamReader reader = new StreamReader(fs);
                    fullname = fileName;
                    contents = readerReadToEnd();
                    fsClose();
                }
            }
            catch (Exception ex)
            {
                MessageBoxShow(exMessage);
            }
        }
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name=fullname>文本文件名</param>
        /// <param name=contents>內容</param>
        public static void Save(string fullnamestring contents)
        {//保存
            try
            {
                StreamWriter writer = new StreamWriter(fullname);
                writerWrite(contents);      //用write()方法把txtContent的數據寫入文件
                writerClose();
            }
            catch (Exception ex)
            {
                MessageBoxShow(exMessage);
            }
        }
        /// <summary>
        /// 另存為
        /// </summary>
        /// <param name=sfd>保存對話框</param>
        /// <param name=contents>內容</param>
        public static void SaveAs(SaveFileDialog sfdstring contents)
        {
            if (sfdShowDialog() == DialogResultOK)
            {
                string fileName = sfdFileName;
                try
                {
                    Stream stream = FileOpenWrite(fileName);
                    using (StreamWriter writer = new StreamWriter(stream))
                    {
                        writerWrite(contents);
                        writerClose();
                    }
                }
                catch (Exception ex)
                {
                    MessageBoxShow(exMessage);
                }
            }
        }
        /// <summary>
        /// 粗體
        /// </summary>
        /// <param name=rtb></param>
        public static void Bold(RichTextBox rtb)
        {
            Font newFont = new Font(rtbSelectionFont
                        (rtbSelectionFontBold ?
                         rtbSelectionFontStyle & ~FontStyleBold :
                         rtbSelectionFontStyle | FontStyleBold));
            rtbSelectionFont = newFont;
        }
        /// <summary>
        /// 斜體
        /// </summary>
        /// <param name=rtb></param>
        public static void Italic(RichTextBox rtb)
        {
            Font newFont = new Font(rtbSelectionFont
           (rtbSelectionFontItalic ?
            rtbSelectionFontStyle & ~FontStyleItalic :
            rtbSelectionFontStyle | FontStyleItalic));
            rtbSelectionFont = newFont;
        }
        /// <summary>
        /// 下劃線
        /// </summary>
        /// <param name=rtb></param>
        public static void Underline(RichTextBox rtb)
        {
            Font newFont = new Font(rtbSelectionFont
           (rtbSelectionFontUnderline ?
            rtbSelectionFontStyle & ~FontStyleUnderline :
            rtbSelectionFontStyle | FontStyleUnderline));
            rtbSelectionFont = newFont;
        }
        /// <summary>
        /// 復制
        /// </summary>
        /// <param name=rtb></param>
        public static void Copy(RichTextBox rtb)
        {
            if (rtbSelectedTextEquals())
                return;
            ClipboardSetDataObject(rtbSelectedText true);
        }
        /// <summary>
        /// 剪切
        /// </summary>
        /// <param name=rtb></param>
        public static void Cut(RichTextBox rtb)
        {
            if (rtbSelectedTextLength > )
            {
                try
                {
                    rtbCut();
                }
                catch (Exception ex)
                {
                    MessageBoxShow(exMessage);
                }
            }
        }
        /// <summary>
        /// 粘貼
        /// </summary>
        /// <param name=rtb></param>
        public static void Paste(RichTextBox rtb)
        {
            rtbPaste();
        }
        /// <summary>
        /// 退出
        /// </summary>
        /// <param name=fullname>文本文件全名</param>
        /// <param name=contents>內容</param>
        public static void Exit(string fullnamestring contents)
        {
            if (MessageBoxShow(      是否保存文件

  提示 MessageBoxButtonsOKCancel) == DialogResultOK)
            {
                try
                {
                    StreamWriter writer = new StreamWriter(fullname);
                    writerWrite(contents);      //用write()方法把txtContent的數據寫入文件
                    writerClose();
                }
                catch (Exception ex)
                {
                    MessageBoxShow(exMessage);
                }
            }
        }
        /// <summary>
        /// 在指定目錄新建一個文本文件
        /// </summary>
        /// <param name=path></param>
        /// <param name=name></param>
        /// <returns></returns>
        public static StreamWriter CreateText(string path string name)
        {
            return FileCreateText(path + \\ + name);
        }

  /// <summary>
        /// 刪除指定文件
        /// </summary>
        /// <param name=strFile>文件完整路徑</param>
        public static void DeleteFile(string strFile)
        {
            FileDelete(strFile);
        }
    }
}


From:http://tw.wingwit.com/Article/program/net/201311/11857.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.