C#-快速剖析文件和流,并使用

目錄

一、概述

二、文件系統

1、檢查驅動器信息

2、Path

3、文件和文件夾

三、流

1、FileStream

2、StreamWriter與StreamReader

3、BinaryWriter與BinaryReader


?

一、概述

文件,具有永久存儲及特定順序的字節組成的一個有序、具有名稱的集合;

,提供一種向后備存儲寫入字節和從后備存儲讀取字節的方式;?

讀寫文件和目錄時可使用簡單的API,也可使用先進的API提供更多的功能;

使用,可以壓縮數據,并且利用內存映射的文件和管道在不同的任務間共享數據;

?


二、文件系統

System.IO名稱空間包含一些簡單的API,其中最重要的類用于瀏覽文件系統和執行操作,如移動、復制和刪除文件:

  • FileSystemInfo-這是表示任何文件系統對象(如FileInfo和DirectoryInfo)的基類;
  • FileInfo和File-表示文件系統上的文件;
  • DirectoryInfo和Directory-表示文件系統上的文件夾;
  • Path-包含的靜態成員可用于處理路徑名;
  • DriveInfo-它的屬性和方法提供了指定驅動器的信息;

1、檢查驅動器信息

使用DriveInfo的GetDrives()靜態方法獲取DriveInfo對象數組,再訪問每個驅動器信息;

var driveInfos = DriveInfo.GetDrives();
foreach (var driveInfo in driveInfos) Console.WriteLine($"Name:{driveInfo.Name}  totalSize={driveInfo.TotalSize}  freeSpace={driveInfo.TotalFreeSpace}");

?

2、Path

最常用的方法:

  • Path.Combine(),可把任意個字符串參數組合成完整的路徑返回;
  • Path.GetFileName(),獲取帶擴展名的文件名;
  • Path.GetFileNameWithoutExtension(),獲取不帶擴展的文件名;
  • Path.GetExtension(),獲取擴展名
  • Path.GetDirectoryName(),獲取文件夾路徑名;
  • Path.GetFullPath(),獲取包含文件名及擴展名的全路徑名;
  • Path.GetTempFileName(),返回一個臨時文件夾路徑;
  • Path.GetRandomFileName(),返回一個隨機文件名;
  • Path.ChangeExtension(),修改指定文件的擴展名;
string path= Path.Combine(Directory.GetCurrentDirectory(),"test.txt");
var path1=Path.GetFileName(path);
var path2=Path.GetFileNameWithoutExtension(path);
var path3=Path.GetExtension(path);
var path4=Path.GetDirectoryName(path);
var path5=Path.GetFullPath(path);
Console.WriteLine($"文件名:{path1}  無擴展文件名{path2}  擴展:{path3}\n文件夾路徑:{path4}\n全路徑名:{path5}");

0e7b658c2f1f438aa0e31a64290240fb.png

Environment.GetFolderPath(),獲取特殊文件夾的路徑:

var foldPath=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Console.WriteLine(foldPath);//C:\Users\Administrator\Documents

?

3、文件和文件夾

?File、Directory定義靜態方法,FileInfo、DirectoryInfo提供實例方法,對于大多文件屬性只讀不可修改,但可設置創建時間和最后一次訪問時間;

File常用方法:?

  • File.WriteAllText(),創建并寫入文件;
  • File.WriteAllLines(),創建并寫入所有行;
  • File.ReadAllBytes(),讀取文件所有內容;
  • File.ReadAllLines(),讀取文件所有行;
  • File.AppendAllText(),追加的方式寫入所有內容;
  • File.AppendAllLines(),追加的方式寫入所有行;
  • File.Copy(),復制文件;
  • File.Exists(),判斷文件是否存在;
  • File.Create(),創建指定路徑文件;
  • File.Open(),打開指定路徑上的FileStream(文件流);
  • File.OpenWrite(),打開或創建一個文件用于寫,返回可寫的流(流位置在開始);
  • File.OpenRead(),打開存在的文件用于讀,返回可讀的流;

Directory常用方法:?

  • Directory.Exists(),判斷文件夾是否存在;
  • Directory.GetDirectories(),獲取指定目錄中所有子目錄的名稱;
  • Directory.GetDirectoryRoot(),返回指定路徑的卷信息、根信息或二者同時返回;
  • Directory.GetCurrentDirectory(),獲取當前工作目錄;
  • Directory.GetFiles(),獲取指定目錄的所有文件名稱;
  • Directory.GetFileSystemEntries(),獲取所有文件和子目錄名稱;
  • Directory.GetParent(),檢索指定路徑的父目錄;

?FileInfo常用屬性(方法大多與File靜態類相同)

  • Directory:獲取父目錄實例;
  • DirectoryName:獲取表示目錄完整路徑的字符串;
  • FullName:獲取目錄或文件的完整目錄;
  • Name:獲取文件名;
  • IsReadOnly,獲取和設置文件只讀;
  • Extension,獲取文件擴展名;
  • CreationTime,獲取和設置文件創建時間;
  • LastAccessTime,獲取和設置文件最后訪問時間;
  • Attributes,獲取和設置文件的特性;
  • Length,獲取文件大小,以字節為單位;

DirectoryInfo常用屬性(方法大多與Directory靜態類相同)

  • Extension:獲取表示文件擴展名部分的字符串;
  • Parent:獲取指定子目錄的父目錄;
  • Root:獲取路徑的根部分;

?


三、流

流是一個用于傳輸數據的對象,數據可以向兩個方向傳輸,如果數據從外部源傳輸到程序中,為讀取流,如果數據從程序傳輸到外部源中,為寫入流

外部源常常是一個文件,但也不完全是文件,外部數據源可以是?:文件流,網絡流、內存流或任意數據源;

Stream類,是構成所有其它流的抽象類;

一些流可以鏈接起來,比如DeflateStream可壓縮數據(該流可寫入FileStream、MemoryStream或NetworkStream),CryptoStream可以加密數據,可以鏈接DeflateStream和CryptoStream,再寫入FileStream;

1、FileStream

文件流,在磁盤或網絡路徑上指向文件的流;

①FileStream常用構造器

  • 參數1,指定文件路徑;
  • 參數2,FileMode枚舉(Append追加或新建,Create新建或改寫,Open打開文件,CreateNew新建,OpenOrCreate,打開文件或新建,Truncate打開并清空);
  • 參數3,FileAccess枚舉,讀、寫、讀與寫;
  • 參數4,FileShare枚舉,Delete、None、Read、Write。。。;

②常用屬性:

  • CanRead、CanSeek、CanTimeout、CanWrite
  • IsAsync,是異步還是同步打開文件流;
  • Length,獲取用字節表示的流長度;
  • Name、Position、ReadTimeout、WriteTimeout

③常用方法:

  • BeginRead()、BeginWrite(),異步讀、寫操作;
  • Close()、Read()、ReadByte()、WriteByte();
  • Write(),寫入一個字節數組或Span類型(不用傳開始位置和大小);
  • EndRead(),等待掛起的異步讀取完成;
  • EndWrite(),結束異步寫入,在I/O操作完成前一直阻止;
  • (Unlock)Lock(),允許讀取訪問的同時防止其它進程更改FileStream;
  • Seek(),設置該流當前位置;
  • SetLength(),設置讀流的長度;
  • CopyTo(),復制流;

?


2、StreamWriter與StreamReader

由于直接讀寫流不是那么容易,所以一般使用讀寫器和寫入器;

基類分別為TextWriter和TextReader(也是StringWriter和StringReader基類);

文本文件的寫入、讀取流,一般以一個Stream類型對象構造(可指定編碼);

①StreamWriter

常用屬性:Encoding、Formatprovider、NewLine、AutoFlush

常用方法(部分方法提供異步):

  • Close(),關閉當前流對象;
  • Write(),寫字符串到流;
  • WriteLine(),寫一行字符串到流;
  • Dispose(),釋放當前流對象資源;
  • Flush(),刷新(清空)當前流緩存區;

②StreamReader

常用屬性:EndOfStream,可檢查文件的末尾

常用方法(部分方法提供異步):

  • Close()、Read()、ReadLine(),同上
  • ReadBlock(),讀取最大count的字符并從index開始寫入buffer;
  • ReadToEnd(),將整個流(從當前位置到結尾)作為字符串讀取;

?


3、BinaryWriter與BinaryReader

專門用于讀寫二進制格式的流產品API ;

以Stream類型對象構造;

①BinaryWriter,以二進制形式將基元類型寫入流

常用方法:

  • Close(),關閉流;
  • Write(),寫字節數組(提供string、int等多種重載)到流;
  • Seek(),寫入位置標識偏移到指定位置;

②BinaryReader,用特定編碼將基元數據類型讀作二進制值

常用方法:

  • Close(),關閉流;
  • ReadByte(),讀取一個字節返回
  • ReadBytes(),讀取指定count字節返回
  • Read(),從index開始讀取count個字節到buffer中;
  • ReadBoolean(),ReadChar(),ReadInt32(),ReadString()。。。讀取指定類型返回;? ? ??

?

?

?

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

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

相關文章

大模型的全方位評估

摘要: 評估通過提供一種跟蹤進度、理解模型以及記錄其能力和偏差的方法,為基礎大模型提供了背景。基礎大模型挑戰了機器學習中標準評估范式實現這些目標的能力,因為它們距離特定任務只有一步之遙。為了設想適合基礎模型的評估新范式&#xff…

枚舉 LeetCode2048. 下一個更大的數值平衡數

如果整數 x 滿足:對于每個數位 d ,這個數位 恰好 在 x 中出現 d 次。那么整數 x 就是一個 數值平衡數 。 給你一個整數 n ,請你返回 嚴格大于 n 的 最小數值平衡數 。 如果n的位數是k,n它的下一個大的平衡數一定不會超過 k1個k1…

圖論——最小生成樹

圖論——最小生成樹 A wise man changes his mind, a fool never will 生成樹 一個連通圖的生成樹是一個極小的連通子圖,它包含圖中全部的n個頂點,但只有構成一棵樹的n-1條邊。 最小生成樹 在這些邊中選擇N-1條出來,連接所有的N個點。這N-1…

Java后端的登錄、注冊接口是怎么實現的

目錄 Java后端的登錄、注冊接口是怎么實現的 Java后端的登錄接口是怎么實現的 Java后端的注冊接口怎么實現? 如何防止SQL注入攻擊? Java后端的登錄、注冊接口是怎么實現的 Java后端的登錄接口是怎么實現的 Java后端的登錄接口的實現方式有很多種&a…

使用git出現的問題

保證 首先保證自己的git已經下載 其次保證自己的gitee賬號已經安裝并且已經生成ssh公鑰 保證自己要push的代碼在要上傳的文件夾內并且配置文件等都在父文件夾(也就是文件沒有套著文件) 問題 1 $ git push origin master gitgitee.com: Permission de…

近似同態加密的 IND/SIM-CPA+ 安全性:對于 CKKS 實際有效的攻擊

參考文獻: [LM21] Li B, Micciancio D. On the security of homomorphic encryption on approximate numbers[C]//Advances in Cryptology–EUROCRYPT 2021: 40th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Z…

【Linux】命令expect使用詳解

🦄 個人主頁——🎐個人主頁 🎐?🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感謝點贊和關注 ,每天進步一點點!加油!&…

【上海大學數字邏輯實驗報告】五、記憶元件測試

一、實驗目的 掌握R-S觸發器、D觸發器和JK觸發器的工作原理及其相互轉換。學會用74LS00芯片構成鐘控RS觸發器。學會用74LS112實現D觸發器學會在Quartus II上用D觸發器實現JK觸發器。 二、實驗原理 基本R-S觸發器是直接復位-置位的觸發器,它是構成各種功能的觸發器…

AI文檔助手,當下熱門的AI文檔助手【2024】

在當今信息爆炸的時代,文檔創作的需求愈發龐大。為了滿足用戶對高效、準確、原創性文檔的需求,人工智能技術的應用日益廣泛。本文將專心分享AI文檔助手領域的熱門推薦。 AI文檔助手的背景與應用 AI文檔助手作為人工智能技術在文檔創作領域的一大應用&am…

nginx配置自建SSL證書

文章目錄 前言配置SSL證書SSL證書放在 Nginx 而不放在應用服務器上的好處Nginx只能轉發http協議嗎Nginx轉發TCP協議會收到端口限制嗎Nginx本身能將Websocket數據轉化成TCP數據嗎總結 前言 之前的一篇文章《自建CA并生成自簽名SSL證書》中講到為什么要自建CA和自簽名SSL證書&am…

velocity-engine-core是什么?Velocity模板引擎的使用

velocity-engine-core是什么?Velocity模板引擎的使用 1. 常見的模板引擎2. Velocity 的語法3.Velocity的使用 相信在日常開發中或多或少都聽過或者使用過模板引擎,比如熟知的freemarker, thymeleaf等。而模板引擎就是為了實現View和Data分離而產生的。 而…

C++封裝、繼承(單繼承)、多態詳細分析。

系列文章目錄 文章目錄 系列文章目錄摘要一、基本概念二、多態的分類三、多態的實現3.1 類型兼容與函數重寫3.2 動態聯編與靜態聯編3.3 虛函數3.4 動態多態的實現過程 總結參考文獻 摘要 多態性特征是 C中最為重要的一個特征,熟練使用多態是學好 C的關鍵&#xff0…

Kotlin關鍵字二——constructor和init

在關鍵字一——var和val中最后提到了構造函數,這里就學習下構造函數相關的關鍵字: constructor和init。 主要構造(primary constructor) kotlin和java一樣,在定義類時就自動生成了無參構造 // 會生成默認的無參構造函數 class Person{ }與java不同的是…

configure腳本的常用參數

下面是一些常用的configure選項參數及其解釋&#xff1a; --prefix<directory>&#xff1a;指定安裝目錄--with-<package>&#xff1a;指定依賴的外部庫或軟件包--enable-<feature>&#xff1a;啟用某個特性--disable-<feature>&#xff1a;禁用某個特…

原創 | 數據的確權、流通、入表與監管研究(一):數據與確權

作者&#xff1a;張建軍&#xff0c;中國電科首席專家&#xff0c;神州網信技術總監 本文約7100字&#xff0c;建議閱讀10分鐘 本文主要介紹數據與數據分類、數據確權規則、數據的所有權與其他權利等方面內容&#xff0c;并進行案例分析。 2022年12月發布的《關于構建數據基礎制…

Linux 和 macOS 的主要區別在哪幾個方面呢?

(??? )&#xff0c;Hello我是祐言QAQ我的博客主頁&#xff1a;C/C語言&#xff0c;數據結構&#xff0c;Linux基礎&#xff0c;ARM開發板&#xff0c;網絡編程等領域UP&#x1f30d;快上&#x1f698;&#xff0c;一起學習&#xff0c;讓我們成為一個強大的攻城獅&#xff0…

uniapp實戰 —— 彈出層 uni-popup (含vue3子組件調父組件的方法)

效果預覽 彈出的內容 src\pages\goods\components\ServicePanel.vue <script setup lang"ts"> // 子組件調父組件的方法 const emit defineEmits<{(event: close): void }>() </script><template><view class"service-panel"…

ALSA Compress-Offload API

概述 從 ALSA API 的早期開始&#xff0c;它就被定義為支持 PCM&#xff0c;或考慮到了 IEC61937 等固定比特率的載荷。參數和返回值以幀計算是常態&#xff0c;這使得擴展已有的 API 以支持壓縮數據流充滿挑戰。 最近這些年&#xff0c;音頻數字信號處理器 (DSP) 常常被集成…

git如何配置多個遠程倉庫,并且進行切換

一、配置多個遠程倉庫并進行切換&#xff0c;請按照以下步驟進行操作&#xff1a; 打開命令行終端&#xff0c;并進入您的 Git 倉庫所在的目錄。添加第一個遠程倉庫&#xff0c;使用以下命令&#xff1a;git remote add origin <第一個遠程倉庫的 URL>這里將遠程倉庫命名…

C# .NET平臺提取PDF表格數據,并轉換為txt、CSV和Excel表格文件

處理PDF文件中的內容是比較麻煩的事情&#xff0c;特別是以表格形式呈現的各種數據。為了充分利用這些寶貴的數據資源&#xff0c;我們可以通過程序提取PDF文件中的表格&#xff0c;并將其保存為更易于處理和分析的格式&#xff0c;如txt、csv、xlsx&#xff0c;從而更方便地對…