c#如何读取20g以上的大文件

c#如何读取20g以上的大文件,第1张

在C#中读取20GB以上的大文件,建议使用流(Stream)来读取,以避免一次性加载整个文件到内存中而导致内存不足的问题。

以下是一种使用流来读取大文件的示例代码:

using (FileStream fs = new FileStream(@"C:\path\to\large\file.txt", FileMode.Open, FileAccess.Read))

{

using (BufferedStream bs = new BufferedStream(fs))

{

using (StreamReader sr = new StreamReader(bs))

{

string line

while ((line = sr.ReadLine()) != null)

{

// 处理每一行数据的逻辑

}

}

}

}

在这个代码示例中,我们使用了三个流对象:

FileStream:用于打开大文件并将其作为输入流

BufferedStream:用于加快数据的读取速度,通过使用一个内部缓存来减少对硬盘的读取次数

StreamReader:用于按行读取文本数据

在while循环中,我们可以处理每一行数据的逻辑。由于只读取了一行数据,因此内存占用较小,可以避免因为文件过大导致内存溢出的问题。

需要注意的是,在处理大文件时,为了保证性能,最好使用异步读取方式。这可以通过将StreamReader对象的ReadLine方法替换为异步版本ReadLineAsync来实现。

常见并常用的stream一共有

文件流(FileStream),

内存流(MemoryStream),

压缩流(GZipStream),

加密流(CrypToStream),

网络流(NetworkStream);

1.文件流(读取文件流-输出文件流)FileStream

using(Streamstreamwrite=new FileStream(@"D:\BaiduYunDownload\45.avi",FileMode.OpenOrCreate))

{

using (Stream streamread = new FileStream(@"D:\BaiduYunDownload\xiawu3.avi", FileMode.Open))

{

byte[] ss=new byte[1024*1024*4]

int len

while ((len = streamread.Read(ss, 0, ss.Length)) >0)

{

streamwrite.Write(ss, 0, len)

Thread.Sleep(1000)

}

}

}

2. 内存流(MemoryStream)

string strtxt="dasdfdsfsd"

byte[] bytetxt = Encoding.UTF8.GetBytes(strtxt)

Stream memstream = new MemoryStream()

memstream.Write(bytetxt, 0, bytetxt.Length)

3.压缩流(GZipStream),

压缩:

string s = "dfdfdf"

using (FileStream filestream = File.OpenWrite(@"c:\2.txt"))

{

using (GZipStream zipstream = new GZipStream(filestream, CompressionMode.Compress))

{

byte[] bytes = Encoding.UTF8.GetBytes(s)

zipstream.Write(bytes, 0, bytes.Length)

}

}

解压:

using (FileStream filestream = File.OpenRead(@"c:\2.txt"))

{

using (GZipStream zipstream = new GZipStream(filestream, CompressionMode.Decompress))

{

using (FileStream filestreamwrite = new FileStream(@"c:\3.txt", FileMode.OpenOrCreate))

{

byte[] bytes = new byte[1024 * 1024 * 4]

int length

while ((length = zipstream.Read(bytes, 0, bytes.Length)) >0)

{

filestreamwrite.Write(bytes, 0, length)

}

}

}

}

System.Net.WebClient c = new System.Net.WebClient()byte[] b = c.DownloadData( "http://www.aa.com/aa.doc ")System.IO.MemoryStream ms = new System.IO.MemoryStream()ms.Write(b, 0, b.Length)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8082637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存