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

C# 文件與目錄操作完整指南

     編輯:關於C語言

目錄操作

在 C# 中,System.IO 命名空間提供了豐富的類別來處理目錄與檔案操作。Directory 與 DirectoryInfo 是兩個核心類別,前者提供靜態方法,後者提供實例化操作,兩者各有優勢。

常用目錄操作方法

// 取得所有邏輯磁碟機 (例如 C:\, D:\)
string[] drives = Directory.GetLogicalDrives();

// 取得應用程式目前的工作目錄
string currentPath = Directory.GetCurrentDirectory();

// 從路徑中取得檔案名稱
string fileName = Path.GetFileName(@"c:\dir\file.txt"); // 結果: file.txt

// 取得指定目錄下的所有檔案
string[] files = Directory.GetFiles(path);

// 建立 DirectoryInfo 實例
DirectoryInfo di = new DirectoryInfo(@"f:\MyDir");

// 建立目錄 (若不存在)
DirectoryInfo newDir = Directory.CreateDirectory(@"f:\bbs");

// 檢查目錄是否存在並建立
if (!di.Exists) {
    di.Create();
}

// 建立子目錄
DirectoryInfo subDir = di.CreateSubdirectory("SubDir");

// 刪除目錄 (true 表示遞刪子目錄與檔案)
subDir.Delete(true);
di.Delete(true);

進階目錄操作


// 刪除目錄及其所有內容
Directory.Delete(@"f:\bbs2", true);

// 取得符合模式的子目錄 (例如以 b 開頭)
string[] dirs = Directory.GetDirectories(@"f:\", "b*");
Console.WriteLine($"此目錄中以 b 開頭的子目錄共 {dirs.Length} 個!");
foreach (string dir in dirs) {
    Console.WriteLine(dir);
}

// 取得目錄下所有檔案與子目錄名稱
string[] entries = Directory.GetFileSystemEntries(path);

// 取得父目錄路徑
DirectoryInfo parent = Directory.GetParent(path);
Console.WriteLine(parent.FullName);

// 移動目錄 (含內容)
Directory.Move(@"f:\bbs\1", @"f:\bbs\2");

檔案操作

File 與 FileInfo 提供檔案層級的建立、讀寫、複製、移動、刪除等操作。

文字檔案讀寫範例

using System;
using System.IO;

class TextFileDemo {
    static string path = @"f:\t.txt";

    public static void Main() {
        // 建立並寫入 (覆蓋模式)
        if (!File.Exists(path)) {
            using (StreamWriter sw = File.CreateText(path)) {
                sw.WriteLine("Hello");
            }
        }

        // 讀取檔案
        using (StreamReader sr = File.OpenText(path)) {
            string line;
            while ((line = sr.ReadLine()) != null) {
                Console.WriteLine(line);
            }
        }

        // 刪除與複製
        try {
            File.Delete(path);
            File.Copy(path, @"f:\tt.txt");
        } catch (Exception ex) {
            Console.WriteLine($"操作失敗: {ex.Message}");
        }
    }
}

二進位檔案流操作

private const string fileName = "Test.data";

public static void BinaryFileDemo() {
    // 建立檔案流並寫入位元組
    using (FileStream fs = new FileStream(fileName, FileMode.CreateNew)) {
        byte[] data = new UTF8Encoding(true).GetBytes("This is some text in the file.");
        fs.Write(data, 0, data.Length);
    }

    // 讀取二進位資料
    using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) {
        using (BinaryReader br = new BinaryReader(fs)) {
            for (int i = 0; i < 11; i++) {
                Console.WriteLine(br.ReadInt32());
            }
        }
    }
}

常用串流類別對照表

類別用途
Stream位元組讀寫基底類別,支援同步/非同步、定位
FileStream檔案隨機存取,預設同步
MemoryStream記憶體緩衝區串流,無實體檔案
BufferedStream為其他串流 (如網路串流) 加入緩衝
NetworkStream網路通訊串流
StreamReader/StreamWriter文字編碼讀寫 (支援 UTF-8、Big5 等)
BinaryReader/BinaryWriter基本型別 (int、float、string 等) 的二進位讀寫
StringReader/StringWriter字串作為串流來源/目的地
TextReader/TextWriter文字讀寫抽象基類

編碼轉換範例

// 取得系統預設編碼
Encoding defaultEnc = Encoding.Default;

// 字串轉位元組陣列 (預設編碼)
byte[] bytes = defaultEnc.GetBytes("中國人民解放軍");

// 位元組陣列轉 UTF-8 字串
string utf8Str = Encoding.GetEncoding("UTF-8").GetString(bytes);

ASP.NET 常用檔案操作片段

附加文字到檔案

using (StreamWriter sw = File.AppendText(Server.MapPath(".") + @"\myText.txt")) {
    sw.WriteLine("追逐理想");
    sw.WriteLine("kzlll");
    sw.WriteLine(".Net筆記");
    sw.Flush();
}

複製、移動、刪除檔案

string src = Server.MapPath(@".\myText.txt");
string dest = Server.MapPath(@".\myTextCopy.txt");

File.Copy(src, dest, true);  // 複製並覆蓋
File.Move(src, dest);        // 移動 (剪貼)
File.Delete(dest);           // 刪除

建立多層目錄


// 建立 c:\sixAge\sixAge1\sixAge1_1
DirectoryInfo root = Directory.CreateDirectory(@"c:\sixAge");
DirectoryInfo sub1 = root.CreateSubdirectory("sixAge1");
DirectoryInfo sub2 = sub1.CreateSubdirectory("sixAge1_1");

// 設定目前目錄並建立相對路徑
Directory.SetCurrentDirectory(@"c:\sixAge");
Directory.CreateDirectory("sixAge2");
Directory.CreateDirectory(@"sixAge2\sixAge2_1");
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved