首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 打造 Windows 檔案管理器:System.IO 操作、ListView 多視圖與 RichTextBox 文字編輯完整教學

     編輯:關於C#

專案功能概覽

  • 檔案/資料夾:新建、複製、貼上、刪除、復原
  • 文字編輯:粗體、斜體、底線、複製、剪下、貼上
  • 五種檢視:大圖示、小圖示、清單、詳細資料、標題
  • 介面模擬 Windows 檔案總管風格

核心命名空間:System.IO

類別用途
File建立、複製、移動、刪除、讀寫屬性、開啟文字/二進位流
Directory建立、刪除、列舉、移動目錄
FileStream隨機存取檔案位元組流
StreamReader/Writer文字編碼讀寫 (預設 UTF-8)

關鍵控制項與屬性

ListView 多視圖切換

// View 模式
listView1.View = View.LargeIcon;   // 大圖示
listView1.View = View.SmallIcon;   // 小圖示
listView1.View = View.List;        // 清單
listView1.View = View.Details;     // 詳細資料 (多欄)
listView1.View = View.Tile;        // 標題 (Vista+)

// 圖示來源
listView1.LargeImageList = imageListLarge;  // 32x32 或更大
listView1.SmallImageList = imageListSmall;  // 16x16

// 多選
listView1.MultiSelect = true;
var selected = listView1.SelectedItems; // 取得選取項目集合

ImageList:圖示資源中心

設計時透過屬性視窗匯入圖片;執行時用 imageList.Images.Add(icon) 動態添加。綁定給 ListView、TreeView、ToolBar、TabControl 等。

ContextMenuStrip:右鍵選單

// 1. 設計器拖入 ContextMenuStrip1
// 2. 目標控制項 ContextMenuStrip 屬性指向它
// 3. 動態加入項目
contextMenuStrip1.Items.AddRange(new ToolStripItem[]
{
    mnuNewFile, mnuSeparator1, mnuCut, mnuCopy, mnuPaste, mnuDelete
});

核心類別實作節錄

Folder.cs:資料夾操作

public static class Folder
{
    public static void New(string name, string path)
    {
        name = name.Trim();
        if (string.IsNullOrEmpty(name)) { MessageBox.Show("目錄名不可空"); return; }
        string full = Path.Combine(path, name);
        if (Directory.Exists(full)) { MessageBox.Show("已存在,請重新命名"); return; }
        Directory.CreateDirectory(full);
    }

    public static void Copy(string srcDir, string fileName, string destDir)
        => File.Copy(Path.Combine(srcDir, fileName), Path.Combine(destDir, fileName));

    public static void Delete(string fullPath, bool recursive)
        => Directory.Delete(fullPath, recursive);

    public static DirectoryInfo GetInfo(string path) => new DirectoryInfo(path);

    // 取得路徑中最後一層目錄名起始索引
    internal static int GetLastDirIndex(string fullPath)
    {
        for (int i = fullPath.Length - 1; i >= 0; i--)
            if (fullPath[i] == '\\') return i + 1;
        return 0;
    }
}

Txt.cs:文字檔操作與 RichTextBox 格式化

public static class Txt
{
    public static void New(string name, string path)
    {
        name = name.Trim();
        if (string.IsNullOrEmpty(name)) { MessageBox.Show("檔名不可空"); return; }
        string full = Path.Combine(path, name + ".txt");
        if (File.Exists(full)) { MessageBox.Show("已存在"); return; }
        using (File.CreateText(full)) { } // 建立空檔
    }

    public static string Read(string fullPath)
    {
        try
        {
            using var fs = new FileStream(fullPath, FileMode.Open, FileAccess.Read);
            using var sr = new StreamReader(fs);
            return sr.ReadToEnd();
        }
        catch (Exception ex) { MessageBox.Show(ex.Message); return ""; }
    }

    public static void Save(string fullPath, string content)
    {
        try { File.WriteAllText(fullPath, content); }
        catch (Exception ex) { MessageBox.Show(ex.Message); }
    }

    public static void SaveAs(SaveFileDialog dlg, string content)
    {
        if (dlg.ShowDialog() == DialogResult.OK)
        {
            try { File.WriteAllText(dlg.FileName, content); }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
    }

    // RichTextBox 格式切換:利用 Font.Style 位運算
    public static void ToggleBold(RichTextBox rtb)
    {
        var f = rtb.SelectionFont;
        var style = f.Bold ? f.Style & ~FontStyle.Bold : f.Style | FontStyle.Bold;
        rtb.SelectionFont = new Font(f, style);
    }
    public static void ToggleItalic(RichTextBox rtb)
    {
        var f = rtb.SelectionFont;
        var style = f.Italic ? f.Style & ~FontStyle.Italic : f.Style | FontStyle.Italic;
        rtb.SelectionFont = new Font(f, style);
    }
    public static void ToggleUnderline(RichTextBox rtb)
    {
        var f = rtb.SelectionFont;
        var style = f.Underline ? f.Style & ~FontStyle.Underline : f.Style | FontStyle.Underline;
        rtb.SelectionFont = new Font(f, style);
    }

    public static void Copy(RichTextBox rtb)
    {
        if (!string.IsNullOrEmpty(rtb.SelectedText))
            Clipboard.SetDataObject(rtb.SelectedText, true);
    }
    public static void Cut(RichTextBox rtb)
    {
        if (rtb.SelectedText.Length > 0)
            try { rtb.Cut(); } catch (Exception ex) { MessageBox.Show(ex.Message); }
    }
    public static void Paste(RichTextBox rtb) => rtb.Paste();
}

介面截圖

主介面

D槽內容

新建檔案對話框

新建資料夾對話框

文字編輯視窗

面向對象設計提醒

將檔案/資料夾操作封裝為靜態工具類別,符合單一職責原則;UI 層僅負責呼叫與呈現,便於單元測試與未來遷移至 Web (ASP.NET Core + 前端框架) 架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved