利用C#进行文件读写的方法选择总结

小的文本文件(100M以下)直接用File类的ReadAllText()和WriteAllText()方法
这两个方法内部其实就是封装了StreamReader类的ReadToEnd()和StreamWriter类的WriteToEnd(),
这两个方法的返回值都是string类型,所以只能读写文本文件

小的文本文件的单行读写用StreamReader和StreamWriter这两个类

小的非文本文件用File类的ReadAllBytes()和WriteAllBytes()读写,并用byte[]作中转站
这两个方法内部其实就是封装了FileStream的Read()和Write()方法,
这两个方法的返回值都是byte数组,所以可以读写任何文件

大文件
但File读写特大文件是会出错的,因为它虽然本质上用的是FileStream来读写,但是它的byte[]大小是写死了的(就是被读写文件的大小),所以它是将文件一次性全部读取或写入,文件非常大的时候往往会造成内存溢出
所以要用数据流FileStream,因为我们可以自由定义byte[]的大小,来保证内存不会溢出

一般而言,读文件用FileMode.Open,写文件用FileMode.Create
FileStream的Position属性是一个指针,标记文件流当前读写的位置
代码实现:

 1 using (FileStream fsRead = new FileStream(@"D:\Names.txt", FileMode.Open))
 2 {
 3 using (FileStream fsWrite = new FileStream(@"d:\temp.txt", FileMode.Create))
 4 {
 5 byte[] arr = new byte[200];
 6 //记录到底读取了多少字节的数据
 7 int count = 0;
 8 while (fsRead.Position < fsRead.Length)
 9 {
10 //每一次读取,。返回真正读取到的字节数,用count记录(最后一次读取后可能count可能会小于200)
11 count = fsRead.Read(arr, 0, arr.Length);
12 //将数组中的数据写入到指定的文件
13 fsWrite.Write(arr, 0, count);
14 }
15 }
16 MessageBox.Show("ok");
17 }

总结:

首先看文件大小——如果是大文件则用FileStream,如果是小文件则看是否是文本文件——非文本文件则用File类的ReadAllBytes/WriteAllBytes,是文本文件则看是否是单行读写——是则用StreamReader类/StreamWriter类,不是则用File类的ReadAllText/WriteAllText

另,任意类型的文件都可以用FileStream来读写

时间: 2024-10-05 12:00:33

利用C#进行文件读写的方法选择总结的相关文章

【python学习笔记】pthon3.x中的文件读写操作

在学习python文件读写的时候,因为教程是针对python2的,而使用的是python3.想要利用file类时,类库里找不到,重装了python2还是使不了.在别人园子认真拜读了<详解python2和python3区别>(已收藏)之后,才发现python3已经去掉file类. 现在利用python进行文件读写的方法更加类似于C语言的文件读写操作. 如今总结如下: 一 打开文件—— f = open('poem.txt','x+'): 读过open的帮助文档,然后自己翻译了一下,现给大家分享一

【Win 10 应用开发】文件读写的三种方案

本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧. 先说第一个方案:使用 FileIO类. 这个类属于RT库API,它公开了一堆静态方法,可以直接调用,快捷方便,就像.net里面的File类一样.在使用FileIo类的时候,需要一个引用已知文件的StorageFile实例,而且FileIo只能操作已经存在的文件,它不会自动创建文件,这一点要注意.

在.net中读写config文件的各种方法(自定义config节点)

http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html 阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collection config文件 - 读与写 读写 .net framework中已经定义的节点 xml配置文件 xml配置文件 - CDATA xml文件读写注意事项 配置参数的

利用虚拟内存实现高性能的文件读写,绕过磁盘io

前端:nginx+lua lua负责读取一个 写着每个业务拒绝服务概率的文件,按这个比例在流量过载时抛弃一定比例的请求. 策略生成:每分钟去获取节点流量和本机的网卡流量占比,去生成概率文件. 传统的实现: 写到磁盘,每个请求过来 lua 都去磁盘上io读取/关闭.实时大量的请求是无法承受的. 改进: 利用虚拟内存实现高效率的文件读取,因为文件本身就是在内存中的,没有io之说. 创建内存文件系统,文件讲都存储在内存中 系统默认的地址是 /dev/shm 可以把文件写到这里,和普通文件读写一样,只不

一步一步跟我学习hadoop(6)----hadoop利用FileSystem API 执行hadoop文件读写操作

hadoop文件系统较普通的文件系统差异性主要在于其容错性,普通文件系统不能直接查看hadoop的hdfs对应的文件信息.文件存储起来之后,我们是需要可以访问才能够体现它的价值,hadoop提供了FileSystem API来进行hadoop的文件读写. 本节我是对照hadoop的API中的FileSystem类写的demo,包含了一些主要的方法,更多的需要从相关api中进行查询编写. package org.apache.hadoop.wyg; import java.io.IOExcepti

IOS读写Plist文件最简单方法

在网上搜了一圈,发现好多代码 = =小白不想看那么多啊,然后就琢磨了下,原来这么easy ! 1 // 获取PLIST路径 2 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"plist"]; 3 // 获取PLIST数据 4 NSMutableDictionary *data = [[NSMutableDictionary alloc] initWith

Python:file/file-like对象方法详解【单个文件读写】

IO中读写文件操作方法汇总!----The_Third_Wave的学习笔记! 本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创.不定期更新,有错误请指正. Sina微博关注:@The_Third_Wave 如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址. class file(object) |  file(name[, mode[, buffering]]) -> fi

Python基础之字典、元祖、常用字符串方法、文件读写

字典:键值对方式存在.key value stu={ 'name':'zhangsan', 'gender':'femanl', 'age':17}print(stu) #增加字典值 stu["score"]=87stu.setdefault('dictinct','nanshan') #已经存在就不添加 sstu.update(xx) #把一个字典加入到另外一个字典里面 #删字典值 stu.pop('age')del stu['score'] stu.clear() #清空字典 #查

利用文件头来实现的一些文件类型的方法封装

package com.opslab.util.algorithmImpl; import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.Iterator;import java.util.Map; /** * 利用文件头来实现的一些文件类型的方法封装 */publ