C# 目錄與文件操作筆記

一、基本概念

1. 數據存儲方式對比

存儲方式適用場景特點
數據庫存儲大量、關系復雜、有序的數據結構化強,支持復雜查詢和事務
文件存儲少量、關系簡單的數據(如日志)操作簡便,可存儲于任意介質

2. 文件與流

  • 文件:存儲在磁盤中,帶有指定名稱和路徑的數據集合。

  • 流(Stream):文件讀寫時的字節序列,分為:

    • 輸入流:從文件讀取數據(讀操作)

    • 輸出流:向文件寫入數據(寫操作)

二、核心 I/O 類(System.IO 命名空間)

類名描述
BinaryReader從二進制流讀取原始數據
BinaryWriter以二進制格式寫入原始數據
BufferedStream字節流的臨時存儲(緩沖區),提升讀寫性能
Directory靜態類,操作目錄結構(創建、刪除、遍歷等)
DirectoryInfo非靜態類,對目錄執行操作(實例化后使用,更靈活)
DriveInfo提供驅動器信息(如容量、文件系統)
File靜態類,操作文件(創建、刪除、讀寫等)
FileInfo非靜態類,對文件執行操作(實例化后使用,適合多次操作同一文件)
FileStream用于文件任意位置的讀寫(字節級操作)
MemoryStream操作內存中的數據流(隨機訪問)
Path處理路徑信息(拼接、解析路徑等)
StreamReader從字節流讀取字符(文本文件讀操作)
StreamWriter向流寫入字符(文本文件寫操作)

三、常用類詳解

1. FileStream(字節級文件操作)

用于直接操作字節數組,處理文件的讀寫與關閉,派生自Stream

核心用法
  • 構造函數new FileStream(路徑, FileMode, FileAccess, FileShare)

    • FileMode:文件操作類型(Open/Create/OpenOrCreate/Append

    • FileAccess:數據操作權限(Read/Write/ReadWrite

  • 讀寫示例

    // 讀文件 ?
    using (FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.Read)) { ?byte[] buffer = new byte[1024]; ?int length = fs.Read(buffer, 0, buffer.Length); // 讀取字節 ?string content = Encoding.UTF8.GetString(buffer, 0, length); // 解碼 ?
    } ?
    ?
    // 寫文件 ?
    using (FileStream fs = new FileStream("test.txt", FileMode.Create, FileAccess.Write)) { ?byte[] data = Encoding.UTF8.GetBytes("Hello"); // 編碼 ?fs.Write(data, 0, data.Length); // 寫入字節 ?
    } ?

2. BinaryReader / BinaryWriter(二進制文件操作)

專門處理二進制文件的讀寫,簡化原始數據(如數值、字符串)的二進制轉換。

示例
// 寫二進制文件 ?
using (FileStream fs = new FileStream("data.bin", FileMode.Create)) ?
using (BinaryWriter bw = new BinaryWriter(fs)) { ?bw.Write(123); // 寫入整數 ?bw.Write("test"); // 寫入字符串 ?
} ?
?
// 讀二進制文件 ?
using (FileStream fs = new FileStream("data.bin", FileMode.Open)) ?
using (BinaryReader br = new BinaryReader(fs)) { ?int num = br.ReadInt32(); // 讀整數 ?string str = br.ReadString(); // 讀字符串 ?
} ?

3. BufferedStream(帶緩沖區的流)

通過內存緩沖區減少對操作系統的調用,提升大數據讀寫性能。

示例
using (FileStream fs = new FileStream("bigfile.txt", FileMode.Create)) ?
using (BufferedStream bs = new BufferedStream(fs)) { ?byte[] data = Encoding.UTF8.GetBytes("大量數據..."); ?bs.Write(data, 0, data.Length); // 先寫入緩沖區,滿了自動刷到文件 ?bs.Flush(); // 手動刷新緩沖區(確保數據寫入文件) ?
} ?

4. File 類(靜態文件操作)

靜態類,提供創建、刪除、移動、復制文件及讀寫數據的快捷方法(適合單次操作)。

常用方法
方法作用
Create(string path)創建文件,返回FileStream
Delete(string path)刪除文件
Move(string src, string dest)移動文件
Copy(string src, string dest)復制文件
WriteAllText(string path, string content)寫入字符串(覆蓋原內容)
ReadAllText(string path)讀取所有內容為字符串
WriteAllLines(string path, string[] lines)按行寫入字符串數組

5. StreamReader / StreamWriter(文本文件操作)

專門處理字符流,自動處理編碼(默認 UTF-8),適合讀寫文本文件。

示例
// 寫文本文件 ?
using (StreamWriter sw = new StreamWriter("log.txt")) { ?sw.WriteLine("第一行"); ?sw.WriteLine("第二行"); ?
} ?
?
// 讀文本文件 ?
using (StreamReader sr = new StreamReader("log.txt")) { ?string line; ?while ((line = sr.ReadLine()) != null) { // 逐行讀取 ?Console.WriteLine(line); ?} ?
} ?

6. DriveInfo(驅動器信息)

獲取計算機中驅動器的詳細信息(如容量、文件系統類型)。

常用屬性
  • AvailableFreeSpace:可用空間(字節)

  • DriveFormat:文件系統(如 NTFS)

  • DriveType:驅動器類型(固定 / 移動 / CD-ROM 等)

  • IsReady:驅動器是否就緒

示例
DriveInfo cDrive = new DriveInfo("C:"); ?
if (cDrive.IsReady) { ?Console.WriteLine($"可用空間:{cDrive.AvailableFreeSpace / 1024 / 1024} MB"); ?Console.WriteLine($"文件系統:{cDrive.DriveFormat}"); ?
} ?

7. 文件屬性操作(File / FileInfo)

獲取或設置文件屬性(如只讀、隱藏),File是靜態方法,FileInfo是實例方法(適合多次操作)。

示例
FileInfo file = new FileInfo("test.txt"); ?
file.Attributes = FileAttributes.ReadOnly | FileAttributes.Hidden; // 設置只讀+隱藏 ?
Console.WriteLine($"是否只讀:{file.IsReadOnly}"); ?
Console.WriteLine($"創建時間:{file.CreationTime}"); ?

8. 路徑操作(Path / Environment)

  • Path 類:處理路徑字符串(跨平臺兼容)。

    • GetDirectoryName(path):獲取目錄

    • GetExtension(path):獲取擴展名

    • Combine(path1, path2):拼接路徑

    • GetFullPath(relativePath):獲取絕對路徑

  • Environment 類:提供系統環境信息。

    • CurrentDirectory:當前工作目錄

    • GetFolderPath(SpecialFolder):獲取特殊文件夾路徑(如桌面、臨時目錄)

9. 目錄操作(Directory / DirectoryInfo)

  • Directory:靜態類,適合單次目錄操作。

  • DirectoryInfo:非靜態類,適合多次操作同一目錄。

常用方法
  • CreateDirectory(path):創建目錄(含多級)

  • Delete(path, recursive):刪除目錄(recursive=true刪除非空目錄)

  • GetFiles(path):獲取目錄下所有文件

  • GetDirectories(path):獲取子目錄

遞歸遍歷目錄示例
static void TraverseDir(string path) { ?foreach (string dir in Directory.GetDirectories(path)) { ?Console.WriteLine($"目錄:{dir}"); ?foreach (string file in Directory.GetFiles(dir)) { ?Console.WriteLine($"文件:{file}"); ?} ?TraverseDir(dir); // 遞歸遍歷子目錄 ?} ?
} ?

四、using 語句的作用

自動釋放實現IDisposable接口的資源(如流、文件句柄),避免手動調用Close()Dispose()

// 簡化前 ?
FileStream fs = new FileStream("test.txt", FileMode.Open); ?
// ... 操作 ... ?
fs.Close(); ?
fs.Dispose(); ?
?
// 簡化后(自動釋放) ?
using (FileStream fs = new FileStream("test.txt", FileMode.Open)) { ?// ... 操作 ... ?
} ?

五、總結

  1. 核心類:必須掌握File/FileInfo(文件)、Directory/DirectoryInfo(目錄)、Path(路徑)、DriveInfo(驅動器)。

  2. 靜態 vs 非靜態:

    • 靜態類(File/Directory):適合單次操作,無需實例化。

    • 非靜態類(FileInfo/DirectoryInfo/DriveInfo):適合多次操作同一對象,更靈活。

  3. 編碼一致性:讀寫文件時需使用相同編碼(如 UTF-8),避免亂碼。

  4. 資源釋放:優先使用using語句,確保資源正確釋放。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96044.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96044.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker部署flask并遷移至內網

需要直接使用的可以使用下面的鏈接: 通過網盤分享的文件:docker_flask.tar 鏈接: https://pan.baidu.com/s/163ocPFw8cqfXgVXeejv36g?pwdqxqm 提取碼: qxqm 來自百度網盤超級會員v6的分享 外網部署docker版flask 目錄結構 ./miniconda-docker/ ├── d…

161. Java Lambda 表達式 - 使用工廠方法創建 Predicates

文章目錄161. Java Lambda 表達式 - 使用工廠方法創建 Predicates🎯 Predicate 工廠方法概覽🧪 示例一:Predicate.isEqual() 工廠方法🧪 示例二:Predicate.not() 工廠方法(Java 11)&#x1f3af…

c#Blazor WebAssembly在網頁中多線程計算1000萬次求余

在 Blazor WebAssembly 中實現多線程計算并獲取線程 ID 是可行的,但需要正確配置多線程環境并處理線程安全和 UI 更新邏輯。以下是完整示例和檢測方法:一、準備工作:啟用多線程支持首先需確保項目已啟用 WebAssembly 多線程,修改項…

鼠標右鍵沒有“通過VSCode打開文件夾”

1, WinR 打開運行,輸入regedit,打開注冊表,找到HKEY_CLASSES_ROOT\*\shell分支,如果沒有shell分支,則在*下點擊右鍵,選擇“新建-項”,建立shell分支。 2, 在shell下新建“VisualCod…

[ Spring 框架 ] 框架搭建和屬性賦值

目錄 1. Spring定義: (1). IOC( Inversion of Control): (2). AOP (Aspect Oriented Programming): (3)一站式: 2. spring搭建: (1). 創建一個Maven項目 (2). 導入核心 jar包 (3). 編寫 spring 配置文件 (4). 編寫實體類,并生成set方法 (5). 在resource中加入spring核…

前端 大文件分片下載上傳

前端 大文件分片下載上傳 背景介紹: 當前項目是給投行部門做系統,業務方需要有專門的文檔中心去管理文件,包括但是不限于文件的上傳和下載等等。筆者本來就是采用的瀏覽器表單上傳的方式進行文件上傳,但是誰曾想在進行稍微大一點的…

【Python練習】097. 編寫一個函數,實現簡單的版本控制工具

097. 編寫一個函數,實現簡單的版本控制工具 097. 編寫一個函數,實現簡單的版本控制工具 示例代碼 功能說明 使用方法 注意事項 實現方法 基于文件快照的實現方法 基于差異存儲的實現方法 基于命令模式的實現方法 基于Git-like的實現方法 097. 編寫一個函數,實現簡單的版本控…

嵌入式硬件篇---Tof

TOF 的原理與本質TOF(Time of Flight,飛行時間)是一種通過測量信號(通常是光)在空間中傳播時間來計算距離的技術。其本質是利用 “距離 速度 時間” 的物理公式:通過發射信號(如激光、紅外光&…

Vue diff簡介

Vue3 diff 最長遞增子序列雙端diff 理念 相同的前置和后置元素的預處理,考慮邊界情況,減少移動;最長遞增子序列(動態規劃、二分法),判斷是否需要移動 操作 前置與后置預處理判斷是否需要移動 遞增法&#x…

羅技MX Anywhere 2S鼠標修復記錄

【現象】單擊時總是出現雙擊的現象 【問題原因】從網絡收集: 說法1,歐姆龍微動損壞;說法2,按鍵磨損導致按鍵和微動開關接觸不良; 【問題排查】 微動損壞:拆掉殼子后,用手按住左鍵的微動開關&…

常見IP模塊的仲裁策略和實現

在一個 Message Unit 中包含兩個 Core(處理器核心),它們之間訪問共享資源(如寄存器、FIFO、buffer 等)時,仲裁機制(Arbitration) 是確保系統穩定性和正確性的關鍵。以下是常見的仲裁…

上周60+TRO案件,波比的游戲時間/丹迪世界/飛盤/迪奧/多輪維權,手表/汽車品牌持續發力,垃圾桶專利等新增侵權風險!

賽貝整理上周(2025年8月11日-8月15日)的TRO訴訟案件發案情況,根據賽貝TRO案件查詢系統了解到,上周合計發起了超60起訴訟案件,涵蓋 IP /品牌、版權、專利等多個領域,涉及影視、奢侈品、汽車、游戲、日常用品…

用 Python 在 30 分鐘內搭一個「可回放的實時日志」——把攻擊流量變成可視化劇情

業務背景 我們運營一款 FPS 端游,外掛作者常把 DDoS 偽裝成「玩家掉線」來騙客服。以前排查要撈 CDN 日志、對時間戳、人工比對,平均 2 小時才能定位。現在用一條 30 行的 Python 腳本把邊緣節點日志實時打到 Kafka,再回放到 Grafana&#xf…

如何將 LM Studio 與 ONLYOFFICE 結合使用,實現安全的本地 AI 文檔編輯

人工智能正在改變我們的工作方式——但如今大多數 AI 工具都存在弊端:速度和便利性雖有所提升,但也意味著數據需要發送到外部服務器。對于教育工作者、企業、非政府組織以及任何處理敏感信息的人來說,這都是不可接受的風險。 LM Studio 和 O…

超市電商銷售分析項目:從數據分析到業務決策

國際超市電商銷售數據分析實戰:從數據清洗到業務決策的完整流程 在電商行業,數據是驅動業務增長的核心引擎。本文將以國際超市電商銷售數據為研究對象,完整拆解從數據準備 → 深度分析 → 策略輸出的實戰流程,涵蓋數據清洗、多維度…

GitHub 熱榜項目 - 日榜(2025-08-17)

GitHub 熱榜項目 - 日榜(2025-08-17) 生成于:2025-08-17 統計摘要 共發現熱門項目:12 個 榜單類型:日榜 本期熱點趨勢總結 本期GitHub熱榜呈現三大技術趨勢:1) AI基礎設施持續爆發,Archon OS和Parlant聚焦AI任務管…

記憶翻牌游戲 greenfoot 開發

記憶翻牌游戲是一種經典的益智游戲,玩家需要翻開卡片并記住它們的位置,然后找到所有匹配的卡片對。 核心玩法 游戲開始時,所有卡片都是背面朝上玩家每次可以翻開兩張卡片如果兩張卡片圖案相同,則保持翻開狀態(匹配成功…

【lucene】SegmentInfos

SegmentInfos 類中文說明 ———————————— **一句話** SegmentInfos 是 segments_N 文件的**內存表示**。它把磁盤上的 segments_N 讀進來,變成一堆 SegmentInfo 的集合;當你增刪改索引、合并段、提交時,再把它寫回磁盤&#x…

Read Frog:一款開源AI瀏覽器語言學習擴展

Read Frog:一款開源AI瀏覽器語言學習擴展 來源:Poixe AI Read Frog(中文名:陪讀蛙)是一款開源的瀏覽器擴展,旨在通過人工智能技術,將常規網頁瀏覽轉化為一種沉浸式的語言學習體驗。該工具通過…

天地圖應用篇:增加全屏、圖層選擇功能

天地圖應用篇&#xff1a;增加全屏、圖層選擇功能本節說明&#xff1a; 目的&#xff1a; 實現地圖的圖層切換全屏顯示 / 退出全屏案例截圖 示下&#xff1a;案例代碼示例代碼&#xff1a; <template><div class"tianditu-map-container"><!-- 頂部搜…