C# 檔案IO常用類
File,FileInfo類可以讀取,寫入,建立,刪除,移動檔案
· 在C# 4.0之前ReadAllLines()方法用於讀取檔案中所有的行,並以陣列的形式返回,但是它有一個問題,就是它要等所有的行寫入記憶體之後才能讀取第一行內容。
· ReadLines()方法解決了這個問題,它返回IEnumerable<string>而不是string陣列,這個新增的方法要高效很多,它不是將所有行一次性載入進記憶體中,而是每次讀取一行。
var path = Path.Combine(@"D:\迅雷下載", "ReadMe.txt");
//不推薦使用
var files = File.ReadAllLines(path);
foreach (var item in files)
{
Console.WriteLine(item);
}
//推薦使用
var files2 = File.ReadLines(path);
foreach (var item in files2)
{
Console.WriteLine(item);
}
· 如果要開啟一個很大的檔案,之前的方法要等整個檔案都加入記憶體中,才能訪問第一行。而這個新方法每次只讀取一行,更加高效。
· Path類可以讀取檔案或目錄的資訊如:副檔名,檔案,資料夾名,返回隨機檔案,建立臨時檔案等。
var fileName = @"D:\資料庫檔案\資料庫.txt";
var ext = Path.GetExtension(fileName);
var dir = Path.GetDirectoryName(fileName);
var file = Path.GetFileName(fileName);
var fileWithoutExt = Path.GetFileNameWithoutExtension(fileName);
var rootName = Path.GetPathRoot(fileName);
var randomFile = Path.GetRandomFileName();
var fullName = Path.GetFullPath(randomFile);
var tempName = Path.GetTempFileName();
var tempPath = Path.GetTempPath();
var tempNameAfter = Path.ChangeExtension(tempName, "txt");
Console.WriteLine($"目錄名稱:{ dir },擴充名:{ext},檔名:{file},沒有擴充名的檔名:{fileWithoutExt}");
Console.WriteLine($"根目錄名稱:{rootName},隨機檔名:{randomFile},隨機檔案路徑:{fullName},臨時檔案:{tempName}");
Console.WriteLine($"臨時資料夾路徑:{tempPath},修改後的臨時檔案:{tempNameAfter}");
· 流是一個用於傳輸資料的物件,資料可以向兩個方向傳輸:
· 外部源 --> 程式 (讀取流)
· 程式 --> 外部源 (寫入流)
· 外部源可能是一些網路協議(介面),命名管道,記憶體區域
· 我們可以使用System.IO,MemoryStream物件讀寫記憶體
· System.Net.Sockets.NetworkStream物件處理網路資料
· Stream類對外部資料來源不做任何假定,外部資料來源可以是檔案流,記憶體流,網路流或任意資料來源。
· 一些流可以連結呼叫(chain),可以先使用DeflateStream壓縮資料,然後寫入到FileStream,MemoryStream或NetworkStream中。
· 直接讀寫流不是那麼容易,但是可以使用閱讀器和寫入器,流入StringReader和StringWriter類。這是一個關注點分離。
使用FileStream類讀寫文字檔案,需要使用位元組陣列。有更簡單的方法:使用讀取器(StreamReader)和寫入器(StreamWriter),使用它們無需處理位元組陣列和編碼,比較輕鬆。
使用FileStream讀取檔案的例子:
var path = Path.Combine(@"D:\迅雷下載", "ReadMe.txt");
using (FileStream stream = new FileStream(path,FileMode.OpenOrCreate))
{
byte[] b = new byte[stream.Length];
var r = stream.Read(b, 0, (int)stream.Length);
var s = Encoding.UTF8.GetString(b);
Console.WriteLine(s);
}
使用StreamReader讀取檔案的例子:
string path = @"D:\迅雷下載\ReadMe.txt";
goto s1;
s1:
//StreamReader可以使用EndOfStream檢查是否在檔案末尾,使用ReadLine()讀取文字行
using (var stream = new StreamReader(path))
{
while(!stream.EndOfStream)
{
string line = stream.ReadLine();
Console.WriteLine(line);
}
}
s2:
//還可以使用File類的OpenText方法建立StreamReader,並且StreamReader還可以呼叫ReadToEnd()方法讀取完整的檔案。
using (var stream = File.OpenText(path))
{
var content = stream.ReadToEnd();
Console.WriteLine(content);
}
相關文章
- c++ IO類,檔案操作C++
- 檔案IO操作
- C# 基礎知識系列- 14 IO篇 檔案的操作C#
- [java IO流]之 隨機訪問檔案(RandomAccessFile類)Java隨機randomMac
- Linux檔案IO操作Linux
- Python IO檔案管理Python
- Java 檔案 IO 操作Java
- Linux C 檔案IOLinux
- Day55.IO流複習 -Java常用類、集合、IO#Java
- 檔案IO的學習
- Linux常用檔案型別有哪些?六大類!Linux型別
- 檔案IO中基礎操作
- 學習Rust 檔案與 IORust
- Java-IO:複製檔案Java
- Python 檔案讀寫(Python IO)Python
- Java 檔案 IO 操作之 DirectIOJava
- C#檔案列表C#
- C#配置檔案C#
- C# 檔案操作C#
- .net 6 C#中System.IO.Path類的用法C#
- IO流之 檔案操作字元流字元
- IO流 檔案字元流FileReader、FlieWriter字元
- [java IO流]之檔案複製Java
- [java IO流]之檔案拷貝Java
- 檔案IO操作的最佳實踐
- Perl IO:隨機讀寫檔案隨機
- c#壓縮檔案C#
- Java —— 檔案類(File 類)Java
- PDF 檔案編寫器 C# 類庫(版本 1.28.0)使用詳解C#
- Linux常用配置檔案Linux
- 類檔案結構_class類檔案的的結構
- File類的特點?如何建立File類物件?Java中如何操作檔案內容,什麼是Io流Io流如何讀取和寫入檔案?位元組緩衝流使用原則?物件Java
- C#讀取文字檔案和寫文字檔案C#
- 常用系統io
- 常用標準io
- Linux系統程式設計-檔案IOLinux程式設計
- C# httpclient上傳檔案C#HTTPclient
- C# 壓縮PDF檔案C#