C# 讀取txt大文件

1GB以下

using System.Text;namespace DotnetReadTxt;class Program
{static void Main(string[] args){try{Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);var gb2312 = Encoding.GetEncoding("GB2312");int index = 0;using (StreamReader sr = new StreamReader("ip20240529.txt",gb2312)){string line;// 逐行讀取文件,直到讀取完畢  while ((line = sr.ReadLine()) != null){// 在這里處理每一行,例如打印到控制臺  index++;if (index < 10){Console.WriteLine(line);}}}Console.WriteLine("讀取完畢~~");}catch (Exception e){// 處理可能出現的異常,例如文件不存在或沒有讀取權限等  Console.WriteLine("The file could not be read:");Console.WriteLine(e.Message);}}/// <summary>/// 獲取文本文件的字符編碼類型/// </summary>/// <param name="fileName"></param>/// <returns></returns>static Encoding GetTextFileEncodingType(string fileName){Encoding encoding = Encoding.Default;FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);BinaryReader binaryReader = new BinaryReader(fileStream, encoding);byte[] buffer = binaryReader.ReadBytes((int)fileStream.Length);binaryReader.Close();fileStream.Close();if (buffer.Length >= 3 && buffer[0] == 239 && buffer[1] == 187 && buffer[2] == 191){encoding = Encoding.UTF8;}else if (buffer.Length >= 3 && buffer[0] == 254 && buffer[1] == 255 && buffer[2] == 0){encoding = Encoding.BigEndianUnicode;}else if (buffer.Length >= 3 && buffer[0] == 255 && buffer[1] == 254 && buffer[2] == 65){encoding = Encoding.Unicode;}else if (IsUTF8Bytes(buffer)){encoding = Encoding.UTF8;}return encoding;}/// <summary>/// 判斷是否是不帶 BOM 的 UTF8 格式/// BOM(Byte Order Mark),字節順序標記,出現在文本文件頭部,Unicode編碼標準中用于標識文件是采用哪種格式的編碼。/// </summary>/// <param name="data"></param>/// <returns></returns>private static bool IsUTF8Bytes(byte[] data){int charByteCounter = 1; //計算當前正分析的字符應還有的字節數 byte curByte; //當前分析的字節. for (int i = 0; i < data.Length; i++){curByte = data[i];if (charByteCounter == 1){if (curByte >= 0x80){//判斷當前 while (((curByte <<= 1) & 0x80) != 0){charByteCounter++;}//標記位首位若為非0 則至少以2個1開始 如:110XXXXX...........1111110X if (charByteCounter == 1 || charByteCounter > 6){return false;}}}else{//若是UTF-8 此時第一位必須為1 if ((curByte & 0xC0) != 0x80){return false;}charByteCounter--;}}if (charByteCounter > 1){throw new Exception("非預期的byte格式");}return true;}
}

1GB以上

ReadTxtFileLine.cs

using System.Text;namespace DotnetReadTxt;/// <summary>
/// 本類用于使用StreamReader.Read()方法,實現逐行讀取文本文件,
/// </summary>
public class ReadTxtFileLine
{//文件讀取的狀態,當為false時,代表未讀完最后一行,true為讀完了最后一行int _IsReadEnd = 0;System.IO.StreamReader sr1;int _LoopRowNumNow = 0;//定義了一個是否讀到最后的屬性,數據類型為整數,大于0未讀到,等于0是表示末尾了public int IsReadEnd{get => _IsReadEnd;}//構造函數public ReadTxtFileLine(string TxtFilePath, Encoding FileEncoding){sr1 = new System.IO.StreamReader(TxtFilePath, FileEncoding);_IsReadEnd = 1;}//成員方法,執行一次,返回1行的結果,當全部讀完,依然執行該方法,將返回空字符串""public string GetLineStr(){string strLine = "";int charCode = 0;while (sr1.Peek() > 0){charCode = sr1.Read();if (charCode == 10) //發現換行符char10就返回拼接字符串{_LoopRowNumNow++;return strLine;}else{if (charCode != 13){//將一行的數據重新拼接起來strLine += ((char)charCode).ToString();}}}_IsReadEnd = -1;sr1.Close();sr1.Dispose();return strLine;}
}

使用

static void Main(string[] args){try{Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);var gb2312 = Encoding.GetEncoding("GB2312");ReadTxtFileLine ReadTxtFileTest1 = new ReadTxtFileLine("ip20240529.txt", gb2312);int index = 0;while (ReadTxtFileTest1.IsReadEnd>0){//這里將讀出來的1行賦值給strstring str = ReadTxtFileTest1.GetLineStr();index++;if (index < 10){Console.WriteLine(str);}}Console.WriteLine("讀取完畢~~");}catch (Exception e){// 處理可能出現的異常,例如文件不存在或沒有讀取權限等  Console.WriteLine("The file could not be read:");Console.WriteLine(e.Message);}}

gb2312讀取需要安裝一個庫System.Text.Encoding.CodePages
感謝浪人甲蟲大佬文章

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

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

相關文章

conda與pip的鏡像源與代理設置

conda與pip的鏡像源與代理設置 一、前言二、conda鏡像源設置2.1conda默認鏡像源介紹2.2通過終端設置鏡像源2.3通過配置文件設置鏡像源 三、pip鏡像源設置3.1pip默認鏡像源介紹3.2通過終端臨時設置鏡像源3.3通過配置文件設置一個或多個鏡像源 四、conda代理設置4.1通過終端設置代…

數據結構與算法筆記:基礎篇 - 棧:如何實現瀏覽器的前進和后退功能?

概述 瀏覽器的前進、后退功能&#xff0c;你肯定很熟悉吧&#xff1f; 當依次訪問完一串頁面 a-b-c 之后&#xff0c;點擊瀏覽器的后退按鈕&#xff0c;就可以查看之前瀏覽過的頁面 b 和 a。當后退到頁面 a&#xff0c;點擊前進按鈕&#xff0c;就可以重新查看頁面 b 和 c。但…

放開了去的 ulimit

放開了去的 ulimit 放開了去的 ulimitulimit簡介臨時修改打開文件數目永久修改系統總打開句柄限制更多信息 放開了去的 ulimit ulimit簡介 對于高并發或者頻繁讀寫文件的應用程序而言&#xff0c;有時可能需要修改系統能夠打開的最多文件句柄數&#xff0c;否則就可能會出現t…

HTTPS 原理技術

HTTPS原理技術 背景簡介原理總結 背景 隨著年齡的增長&#xff0c;很多曾經爛熟于心的技術原理已被歲月摩擦得愈發模糊起來&#xff0c;技術出身的人總是很難放下一些執念&#xff0c;遂將這些知識整理成文&#xff0c;以紀念曾經努力學習奮斗的日子。本文內容并非完全原創&am…

Element-ui使用上傳時彈框選擇文件類型

實現效果 1&#xff0c;點擊上傳&#xff0c;上傳文件&#xff1b; 2&#xff0c;選擇文件&#xff1b; 3&#xff0c;彈框選擇文件類型&#xff1b; 4&#xff0c;選擇類型后確定上傳&#xff1b; 一&#xff0c;上傳 跳過&#xff1b; 二&#xff0c;定義彈框下拉框…

Coolmuster Android Assistant: 手機數據管理的全能助手

在數字化時代&#xff0c;智能手機不僅是通訊工具&#xff0c;更是個人數據的中心。隨著數據量的不斷增加&#xff0c;如何有效管理和保護這些數據成為了一個重要議題。Coolmuster Android Assistant應運而生&#xff0c;它是一款專為安卓用戶設計的綜合數據管理軟件&#xff0…

EXCEL數據透視圖中的日期字段,怎樣自動分出年、季度、月的功能?

在excel里&#xff0c;這個果然是有個設置的地方&#xff0c;修改后就好了。 點擊文件選項卡&#xff0c;選項&#xff0c;在高級里&#xff0c;將圖示選項的勾選給取消&#xff0c;然后再創建數據透視表或透視圖&#xff0c;日期就不會自動組合了&#xff1a; 這個選項只對新…

遙感圖像的深度學習的任務類型

在遙感圖像的深度學習任務中&#xff0c;利用深度學習技術處理和分析遙感圖像已經成為一個重要的研究方向。遙感圖像來自衛星、無人機等設備&#xff0c;包含了豐富的地球表面信息。以下是遙感圖像深度學習中的主要任務類型&#xff1a; 1. 圖像分類&#xff08;Image Classif…

Flutter 中的 SliverPrototypeExtentList 小部件:全面指南

Flutter 中的 SliverPrototypeExtentList 小部件&#xff1a;全面指南 Flutter 是一個功能強大的 UI 框架&#xff0c;由 Google 開發&#xff0c;允許開發者使用 Dart 語言構建跨平臺的移動、Web 和桌面應用。在 Flutter 的豐富組件庫中&#xff0c;SliverPrototypeExtentLis…

山東理工大學第十六屆ACM程序設計競賽(同步賽)

山東理工大學第十六屆ACM程序設計競賽&#xff08;同步賽&#xff09; B、Q的網課 1、創建一個結構體&#xff0c;來保存我們要輸入的網課名和學時&#xff0c;并且對學時初始化為-1 2、然后w次輸入網課名&#xff0c;對每次輸入減去原先網課名對應學時&#xff0c;統計網課剩余…

關于torch.size和tensor的維度筆記

torch.Size([200, 1])和torch.Size([200])的區別是什么? torch.Size([200, 1]) 和 torch.Size([200]) 是兩個不同形狀的張量 (tensor) 大小。它們的區別如下&#xff1a; torch.Size([200, 1]): 這是一個2D張量&#xff0c;形狀是200行1列。這種形狀通常用來表示一個列向量或…

suffix-tree教程(個人總結)

背景 在計算機科學和生物信息學中&#xff0c;字符串處理是一個非常重要的領域。無論是搜索引擎、基因序列分析&#xff0c;還是壓縮算法&#xff0c;都離不開高效的字符串處理。傳統的字符串匹配算法&#xff0c;如暴力搜索、Knuth-Morris-Pratt (KMP) 算法和 Boyer-Moore 算…

Android14 WMS-IWindow介紹

IWindow是很重要的&#xff0c;官方介紹是API back to a client window that the Window Manager uses to inform it of interesting things happening. 也就是說是是用于WMS回調客戶端的&#xff0c;當窗口有一些改變時&#xff0c;WMS及時調用客戶端接口&#xff0c;讓客戶端…

Ubuntu22.04之解決:忘記登錄密碼(二百三十二)

簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 優質專欄&#xff1a;多媒…

gpt-4o api申請開發部署應用:一篇全面的指南

利用 GPT-4o API 開發創新應用&#xff1a;一篇全面的指南 OpenAI 的 GPT-4o 是一款集成了音頻、視覺和文本處理能力的多模態人工智能模型&#xff0c;它的出現代表了人工智能領域的重大進步。在本篇文章中&#xff0c;我們將詳細介紹如何通過 OpenAI API 使用 GPT-4o&#xf…

html中 table的 colspan和rowspan

Colspan 單元格跨越多列; Rowspan 單元格跨越多行 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> </head> <body><h4>單元格跨兩列:</h4> <table border"1"&…

藍橋杯java組-字符串輸入輸出處理

題目描述&#xff1a;字符串的輸入輸出處理。 輸入&#xff1a;第一行是一個正整數N&#xff0c;最大為100。之后是多行字符串&#xff08;行數大于N&#xff09;&#xff0c; 每一行字符串可能含有空格&#xff0c;字符數不超過1000。 輸出&#xff1a;先將輸入中的前N行字符…

云動態摘要 2024-05-31

給您帶來云廠商的最新動態&#xff0c;最新產品資訊和最新優惠更新。 最新優惠與活動 [1.5折起]年中盛惠--AI分會場 騰訊云 2024-05-30 人臉核身、語音識別、文字識別、數智人、騰訊混元等熱門AI產品特惠&#xff0c;1.5折起 云服務器ECS試用產品續用 阿里云 2024-04-14 云…

鴻蒙開發接口媒體:【@ohos.multimedia.medialibrary (媒體庫管理)】

媒體庫管理 說明&#xff1a; 該組件從API Version 6開始支持。后續版本如有新增內容&#xff0c;則采用上角標單獨標記該內容的起始版本。 發前請熟悉鴻蒙開發指導文檔&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md點擊或者復制轉到。 導入模塊 …

2.4 Docker部署JDK

2.4 Docker部署JDK jdk17部署&#xff08;自定義鏡像&#xff09; 1.在官網上下載jdk-17_linux-x64_bin.tar.gz&#xff0c;并安裝到/usr/local目錄下 cd /usr/local2.創建Dockerfile vim Dockerfile# 基于官方的Ubuntu 20.04鏡像作為基礎鏡像 FROM ubuntu:20.04# 設置環境…