C# 文件 I/O 操作詳解:從基礎到高級應用

在軟件開發中,文件操作(I/O)是一項基本且重要的功能。無論是讀取配置文件、存儲用戶數據,還是處理日志文件,C# 都提供了豐富的 API 來高效地進行文件讀寫操作。本文將全面介紹 C# 中的文件 I/O 操作,涵蓋基礎文件操作、文本/二進制文件讀寫、流式處理、異步 I/O 以及最佳實踐,幫助開發者掌握文件處理的技巧。

1. C# 文件操作基礎

C# 的文件操作主要依賴于?System.IO?命名空間,其中?FileDirectoryStreamReaderStreamWriter?等類是核心工具。

1.1 檢查文件是否存在

在操作文件之前,通常需要檢查文件是否存在:

string filePath = @"C:\example\test.txt";
if (File.Exists(filePath))
{Console.WriteLine("文件存在");
}
else
{Console.WriteLine("文件不存在");
}

1.2 創建、刪除和移動文件

  • 創建文件

    File.Create(@"C:\example\newfile.txt");
  • 刪除文件

    File.Delete(@"C:\example\oldfile.txt");
  • 移動/重命名文件

    File.Move(@"C:\example\oldname.txt", @"C:\example\newname.txt");
  • 復制文件

    File.Copy(@"C:\example\source.txt", @"C:\example\destination.txt");

2. 文本文件的讀寫

2.1 讀取文本文件

C# 提供了多種讀取文本文件的方式:

  • File.ReadAllText(讀取整個文件)

    string content = File.ReadAllText(filePath);
    Console.WriteLine(content);
  • File.ReadAllLines(逐行讀取)

    string[] lines = File.ReadAllLines(filePath);
    foreach (string line in lines)
    {Console.WriteLine(line);
    }
  • StreamReader(流式讀取,適合大文件)

    using (StreamReader reader = new StreamReader(filePath))
    {string line;while ((line = reader.ReadLine()) != null){Console.WriteLine(line);}
    }

    ?

2.2 寫入文本文件

  • File.WriteAllText(覆蓋寫入)

    File.WriteAllText(filePath, "Hello, World!");
  • File.AppendAllText(追加寫入)

    File.AppendAllText(filePath, "\nThis is a new line.");
  • StreamWriter(流式寫入)

    using (StreamWriter writer = new StreamWriter(filePath))
    {writer.WriteLine("Line 1");writer.WriteLine("Line 2");
    }

3. 二進制文件的讀寫

二進制文件(如圖片、音頻、數據庫文件)需要使用?BinaryReader?和?BinaryWriter

3.1 寫入二進制文件

using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Create)))
{writer.Write(100);         // 寫入整數writer.Write(3.14);        // 寫入雙精度浮點數writer.Write("Hello");     // 寫入字符串
}

3.2 讀取二進制文件

using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open)))
{int number = reader.ReadInt32();double pi = reader.ReadDouble();string text = reader.ReadString();Console.WriteLine($"Number: {number}, Pi: {pi}, Text: {text}");
}

4. 文件流(FileStream)

FileStream?提供了更底層的文件訪問方式,適用于大文件或需要精細控制的情況。

4.1 使用 FileStream 讀寫文件

// 寫入文件
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{byte[] data = Encoding.UTF8.GetBytes("Hello, FileStream!");fs.Write(data, 0, data.Length);
}// 讀取文件
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{byte[] buffer = new byte[1024];int bytesRead = fs.Read(buffer, 0, buffer.Length);string content = Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine(content);
}

5. 目錄操作

除了文件操作,C# 還提供了目錄管理功能:

5.1 創建和刪除目錄

string dirPath = @"C:\example\newfolder";// 創建目錄
Directory.CreateDirectory(dirPath);// 刪除目錄(recursive: true 表示刪除非空目錄)
Directory.Delete(dirPath, recursive: true);

5.2 遍歷目錄

// 獲取所有文件
string[] files = Directory.GetFiles(dirPath);
foreach (string file in files)
{Console.WriteLine(file);
}// 獲取所有子目錄
string[] subDirs = Directory.GetDirectories(dirPath);
foreach (string dir in subDirs)
{Console.WriteLine(dir);
}

6. 異步文件操作

異步 I/O 可以提高程序性能,特別是在處理大文件時。

6.1 異步讀取文件

async Task<string> ReadFileAsync(string path)
{using (StreamReader reader = new StreamReader(path)){return await reader.ReadToEndAsync();}
}

6.2 異步寫入文件

async Task WriteFileAsync(string path, string content)
{using (StreamWriter writer = new StreamWriter(path)){await writer.WriteAsync(content);}
}

7. 文件操作的最佳實踐

  1. 使用?using?語句:確保文件流正確關閉,避免資源泄漏。

  2. 異常處理:捕獲?IOExceptionFileNotFoundException?等異常。

  3. 大文件處理:使用流式讀取(StreamReader/FileStream)而非一次性讀取全部內容。

  4. 路徑處理:使用?Path.Combine?拼接路徑,避免硬編碼:

    string fullPath = Path.Combine(@"C:\example", "subfolder", "file.txt");
  5. 文件權限檢查:在訪問文件前檢查權限(File.GetAccessControl)。

8. 總結

本文詳細介紹了 C# 中的文件 I/O 操作,包括:

  • 基本文件操作(創建、刪除、移動、復制)

  • 文本文件的讀寫(File.ReadAllTextStreamReader

  • 二進制文件的處理(BinaryReader/BinaryWriter

  • 文件流(FileStream)的使用

  • 目錄管理(Directory?類)

  • 異步文件操作(ReadAsync/WriteAsync

  • 最佳實踐(異常處理、資源釋放、路徑管理)

掌握這些技術后,你可以高效地處理各種文件操作需求,無論是小型配置文件還是大型數據文件。希望本文對你有所幫助!

?

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

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

相關文章

Vue-Router簡版手寫實現

1. 路由庫工程設計 首先&#xff0c;我們需要創建幾個核心文件來組織我們的路由庫&#xff1a; src/router/index.tsRouterView.tsRouterLink.tsuseRouter.tsinjectionsymbols.tshistory.ts 2. injectionSymbols.ts 定義一些注入符號來在應用中共享狀態&#xff1a; import…

Electron-vite【實戰】MD 編輯器 -- 文件列表(含右鍵快捷菜單,重命名文件,刪除本地文件,打開本地目錄等)

最終效果 頁面 src/renderer/src/App.vue <div class"dirPanel"><div class"panelTitle">文件列表</div><div class"searchFileBox"><Icon class"searchFileInputIcon" icon"material-symbols-light:…

Remote Sensing投稿記錄(投稿郵箱寫錯、申請大修延期...)風雨波折投稿路

歷時近一個半月&#xff0c;我中啦&#xff01; RS是中科院二區&#xff0c;2023-2024影響因子4.2&#xff0c;五年影響因子4.9。 投稿前特意查了下預警&#xff0c;發現近五年都不在預警名單中&#xff0c;甚至最新中科院SCI分區&#xff08;2025年3月&#xff09;在各小類上…

吉林第三屆全國龍舟邀請賽(大安站)激情開賽

龍舟競渡處,瑞氣滿湖光。5月31日&#xff0c;金蛇獻瑞龍舞九州2025年全國龍舟大聯動-中國吉林第三屆全國龍舟邀請賽(大安站)“嫩江灣杯”白城市全民健身龍舟賽在吉林大安嫩江灣國家5A級旅游區玉龍湖拉開帷幕。 上午9時&#xff0c;伴隨著激昂的音樂&#xff0c;活力四射的青春舞…

華為OD機試真題——通過軟盤拷貝文件(2025A卷:200分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

2025 A卷 200分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析; 并提供Java、python、JavaScript、C++、C語言、GO六種語言的最佳實現方式! 本文收錄于專欄:《2025華為OD真題目錄+全流程解析/備考攻略/經驗分享》 華為OD機試真題《通過…

一起學數據結構和算法(二)| 數組(線性結構)

數組&#xff08;Array&#xff09; 數組是最基礎的數據結構&#xff0c;在內存中連續存儲&#xff0c;支持隨機訪問。適用于需要頻繁按索引訪問元素的場景。 簡介 數組是一種線性結構&#xff0c;將相同類型的元素存儲在連續的內存空間中。每個元素通過其索引值&#xff08;數…

ZYNQ sdk lwip配置UDP組播收發數據

?? 一、顛覆認知:組播 vs 單播 vs 廣播 通信方式目標設備網絡負載典型應用場景單播1對1O(n)SSH遠程登錄廣播1對全網O(1)ARP地址解析組播1對N組O(1)視頻會議/物聯網群控創新價值:在智能工廠中,ZYNQ通過組播同時控制100臺AGV小車,比傳統單播方案降低92%網絡流量! ?? 二、…

機器學習:欠擬合、過擬合、正則化

本文目錄&#xff1a; 一、欠擬合二、過擬合三、擬合問題原因及解決辦法四、正則化&#xff1a;盡量減少高次冪特征的影響&#xff08;一&#xff09;L1正則化&#xff08;二&#xff09;L2正則化&#xff08;三&#xff09;L1正則化與L2正則化的對比 五、正好擬合代碼&#xf…

Linux命令之ausearch命令

一、命令簡介 ausearch 是 Linux 審計系統 (auditd) 中的一個實用工具,用于搜索審計日志中的事件。它是審計框架的重要組成部分,可以幫助系統管理員分析系統活動和安全事件。 二、使用示例 1、安裝ausearch命令 Ubuntu系統安裝ausearch命令,安裝后啟動服務。 root@testser…

mac電腦安裝nvm

方案一、常規安裝 下載安裝腳本&#xff1a;在終端中執行以下命令來下載并運行 NVM 的安裝腳本3&#xff1a; bash curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.39.5/install.sh | bash配置環境變量&#xff1a;安裝完成后&#xff0c;需要配置環境變量。如…

Excel 操作 轉圖片,轉pdf等

方式一 spire.xls.free&#xff08;沒找設置分辨率的方法&#xff09; macOs開發Java GUI程序提示缺少字體問題解決 Spire.XLS&#xff1a;一款Excel處理神器_spire.xls免費版和收費版的區別-CSDN博客 官方文檔 Spire.XLS for Java 中文教程 <dependency><groupI…

oracle goldengate實現遠程抽取postgresql 到 postgresql的實時同步【絕對無坑版,親測流程驗證】

oracle goldengate實現postgresql 到 postgresql的實時同步 源端&#xff1a;postgresql1 -> postgresql2 流復制主備同步 目標端&#xff1a;postgresql 數據庫版本&#xff1a;postgresql 12.14 ogg版本&#xff1a;21.3 架構圖&#xff1a; 數據庫安裝以及流復制主備…

2.從0開始搭建vue項目(node.js,vue3,Ts,ES6)

從“0到跑起來一個 Vue 項目”&#xff0c;重點是各個工具之間的關聯關系、職責邊界和技術演化脈絡。 從你寫代碼 → 到代碼能跑起來 → 再到代碼可以部署上線&#xff0c;每一步都有不同的工具參與。 &#x1f63a;&#x1f63a;1. 安裝 Node.js —— 萬事的根基 Node.js 是…

MQTT的Thingsboards的使用

訪問云服務 https://thingsboard.cloud/ 新建一個設備 彈出 默認是mosquittor的客戶端。 curl -v -X POST http://thingsboard.cloud/api/v1/tnPrO76AxF3TAyOblf9x/telemetry --header Content-Type:application/json --data "{temperature:25}" 換成MQTTX的客戶…

金磚國家人工智能高級別論壇在巴西召開,華院計算應邀出席并發表主題演講

當地時間5月20日&#xff0c;由中華人民共和國工業和信息化部&#xff0c;巴西發展、工業、貿易與服務部&#xff0c;巴西公共服務管理和創新部以及巴西科技創新部聯合舉辦的金磚國家人工智能高級別論壇&#xff0c;在巴西首都巴西利亞舉行。 中華人民共和國工業和信息化部副部…

BLE協議全景圖:從0開始理解低功耗藍牙

BLE(Bluetooth Low Energy)作為一種針對低功耗場景優化的通信協議,已經廣泛應用于智能穿戴、工業追蹤、智能家居、醫療設備等領域。 本文是《BLE 協議實戰詳解》系列的第一篇,將從 BLE 的發展歷史、協議棧結構、核心機制和應用領域出發,為后續工程實戰打下全面認知基礎。 …

表單校驗代碼和樹形結構值傳遞錯誤解決

表單校驗代碼&#xff0c;兩種方式校驗&#xff0c;自定義的一種校驗&#xff0c;與element-ui組件原始的el-form表單的校驗不一樣&#xff0c;需要傳遞props和rules過去校驗 const nextStep () > {const data taskMsgInstance.value.formDataif(data.upGradeOrg ) {elm…

vscode 配置 QtCreat Cmake項目

1.vscode安裝CmakeTool插件并配置QT中cmake的路徑&#xff0c;不止這一處 2.cmake生成器使用Ninja&#xff08;Ninja在安裝QT時需要勾選&#xff09;&#xff0c;可以解決[build] cc1plus.exe: error: too many filenames given; type ‘cc1plus.exe --help’ for usage 編譯時…

關于數據倉庫、數據湖、數據平臺、數據中臺和湖倉一體的概念和區別

我們談論數據中臺之前&#xff0c; 我們也聽到過數據平臺、數據倉庫、數據湖、湖倉一體的相關概念&#xff0c;它們都與數據有關系&#xff0c;但他們和數據中臺有什么樣的區別&#xff0c; 下面我們將圍繞數據平臺、數據倉庫、數據湖和數據中臺的區別進行介紹。 一、相關概念…

WIN11+eclipse搭建java開發環境

環境搭建&#xff08;WIN11ECLIPSE&#xff09; 安裝JAVA JDK https://www.oracle.com/cn/java/technologies/downloads/#jdk24安裝eclipse https://www.eclipse.org/downloads/ 注意&#xff1a;eclipse下載時指定aliyun的軟件源&#xff0c;后面安裝會快一些。默認是jp漢化e…