惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
宝玉的分享
宝玉的分享
V
Visual Studio Blog
B
Blog RSS Feed
G
Google Developers Blog
U
Unit 42
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Palo Alto Networks Blog
月光博客
月光博客
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
小众软件
小众软件
GbyAI
GbyAI
L
LangChain Blog
A
About on SuperTechFans
Attack and Defense Labs
Attack and Defense Labs
T
Tor Project blog
AWS News Blog
AWS News Blog
S
Security @ Cisco Blogs
H
Hacker News: Front Page
S
SegmentFault 最新的问题
Engineering at Meta
Engineering at Meta
The Register - Security
The Register - Security
Recorded Future
Recorded Future
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
V2EX - 技术
V2EX - 技术
H
Heimdal Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
Y
Y Combinator Blog
Spread Privacy
Spread Privacy
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
P
Privacy International News Feed
I
Intezer
W
WeLiveSecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Help Net Security
Help Net Security
NISL@THU
NISL@THU
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V
Vulnerabilities – Threatpost
N
News | PayPal Newsroom
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
L
Lohrmann on Cybersecurity
Schneier on Security
Schneier on Security

博客园 - changchang

SQL中的join用法(zt) 远程桌面 Web 连接 RTM、RC、CTP版本的含义(ZT) Culture Name(转) - changchang - 博客园 MPEG、RM、WMV电影文件格式转换指南(转) PDF文件相关下载 Form验证(转) .net下枚举的用法 - changchang - 博客园 JavaScript动态的为元素添加事件 dotnet下Request对象获取客户端数据的方式比较(Request.Params) - changchang - 博客园 (转载)一个大家不常用到,却很有用的页面间传值方法(Context.Handler) - changchang - 博客园 CuteEditor学习总结技巧 Javascript图片幻灯片的实现 Window下配置SVN服务器与客户端 Javascript访问html页面的控件 深入理解.net的事件与委托机制 asp.net控件本质 google map简单实现 asp.net 2.0发送和接收邮件总结
.net操作文件的基本方法总结 - changchang - 博客园
changchang · 2007-12-10 · via 博客园 - changchang

先看示例代码片段:
1.读取文件:
FileStream的用法
    System.IO.FileStream fs = new FileStream("Test.txt", FileMode.OpenOrCreate,FileAccess.Read);
            char[] cs = new char[fs.Length];
            byte[] bs = new byte[fs.Length];
            fs.Read(bs,0,(int)fs.Length);
            Encoding e = System.Text.Encoding.UTF8;
            cs=e.GetChars(bs);

            foreach (char c in cs)
            {
                Console.WriteLine(c);
            }
StreamReader的用法:
            string str;
            using (StreamReader sr = new StreamReader("Test.txt"))
            {
                while ((str = sr.ReadLine()) != null)
                {
                    Console.WriteLine(str);
                }
            }
2.写入文件:
FileStream的用法:
 System.IO.FileStream fs = new FileStream("Test.txt", FileMode.Truncate);
            string str = "Hello,this is my cc";
            byte[] array = new byte[str.Length];
            System.Text.Encoding e = System.Text.UTF8Encoding.UTF8;
            array=e.GetBytes(str);
            fs.Write(array, 0, array.Length);
StreamWrite的用法:
using (StreamWriter sw = new StreamWriter("Test.txt",true,Encoding.GetEncoding("gb2312")))
            {
                sw.WriteLine("你好不好,我想你");
            }

下面总结总结:
从上面的实例代码可以看出StreamReader和StreamWrite操作的的字符串,而FileStream操作的是字节数组。而字节数据又要通过Encoding类把字节数组和字符数组进行转换。这是他们之间的本质区别.
另外补充关于System.IO命名空间下类的用法:
在System.IO名称空间中包含了用于文件输入输出的主要类。
File:实用类,提供许多静态方法,用于移动、复制和删除文件。
Directory:实用类,提供许多静态方法,用于移动、复制和删除目录。
Path:实用类,用于处理路径名称。
FileInfo:表示磁盘上的物理文件,具有可以处理此文件的方法。要完成对文件的读取和写入工作,就必须创建Stream对象。
DirectoryInfo:表示磁盘上的物理目录,具有可以处理此目录的方法。
FileStream:表示可以被写或被读,或二者均可的文件。此文件可以同步或异步的读和写。
StreamReader:从流中读取字符数据,并可以通过使用FileStream被创建为基类。
StreamWriter:向流写字符数据,可以通过使用FileStream被创建为基类。
FileSystemWatcher:用于监控文件和目录,并在这些位置发生变化时,给出应用程序可以捕获的事件。

File类一些常用的静态方法:

方法
 说明
 
Copy()
 将文件复制到规定的位置
 
Create()
 在规定的路径上创建文件
 
Delete()
 删除文件
 
Open()
 在规定的路径上返回FileStream对象
 
Move()
 将规定的文件移动到新位置。可以在新位置为文件规定不同的名称
 

Directory类一些常用的静态方法:

方法
 说明
 
CreateDirectory()
 创建具有规定路径的目录
 
Delete()
 删除规定的目录以及其中的所有文件
 
GetDirectories()
 返回表示当前目录之下的目录的Directory对象的数组
 
GetFiles()
 返回在当前目录中的File对象的数组
 
Move()
 将规定的目录移动到新位置。可以在新位置为文件夹规定一个新名称

FileInfo类:

它没有静态方法,仅可用于实例化的对象。FileInfo对象表示在磁盘或网络位置的文件。注意它不是流。为了实现对文件的读取或写入,必须创建Stream对象。

如果仅在对象上进行单一方法调用,则可以使用静态File类。在此,静态调用要快一些,因为.Net Framework不必遍历实例化新对象并调用方法的过程。但是如果应用程序在文件上执行几种操作,在实例化FileInfo对象并使用其方法就更好一些。这会节省时间,因为对象将在文件系统上引用正确的文件,而静态类就必须每次都寻找文件。

FileInfo类提供的基础性的属性,可用来更新文件。

属性
 说明
 
Attributes
 获取或者设置当前文件的属性
 
CreationTime
 获取当前文件的创建日期和时间
 
DirectoryName
 返回文件目录的路径
 
Exists
 判断是否存在文件
 
FullName
 检索文件的完整路径
 
Length
 获取文件的容量
 
Name
 仅仅返回文件的名称,而不是完整的文件位置路径
 

DirectoryInfo类:

DirectoryInfo类的作用类似于FileInfo类。它是一个实例化的对象,表示计算机上的单一目录。同FileInfo类—样,在Directory和DirectoryInfo之间可以复制许多方法调用。当使用这二者时,可以便用相同的原则:如果进行单一调用,就使用静态Directory类。如果进行一系列调用,则使用实例化的DirectoryInfo对象。

DirectoryInfo类与FileInfo类共享几乎所有相同的属性,DirectoryInfo类作用在无文件的目录上除外。

FileStream对象:

表示在磁盘或网络路径上指向文件的流。当类提供向文件读取和写入字节的方法时,经常使用StreamReader和StreamWriter执行这些功能。这是因为FileStream类操作字节和字节数组,而Stream类操作字符数据。

还有几种方法可以创建FileStream对象。构造函数具有许多不同的重载/版本,但是最简单的构造函数仅仅带有两个参数,即文件名和FileMode枚举。

FileStream aFile = new FileStream("a.txt",FileMode.OpenOrCreate);

FileMode枚举的成员:

FileMode枚举成员
 说明
 
Append
 如果文件存在,就打开文件,将文件位置移动到文件的末尾,并创建个新文件。FileMode.Append仅可以与枚举FileAccess.Write联合使用
 
Create
 创建新文件,如果存在这样的文件就破坏它
 
CreateNew
 创建新文件,但是如果已经存在了此文件,则抛出异常
 
Open
 打开现有的文件。如果不存在所规定的文件,则抛出异常
 
OpenOrCreate
 如果文件存在,则规定打开文件,否则就创建新文件。如果文件已经存在,则保留在文件中的数据
 
Truncate
 打开现有文件,清除其内容。然后我们可以向文件写入全新的数据,但是保留文件的初始创建日期。必须存在有文件,否则就会抛出异常
 

前面的构造函数默认以只读模式打开文件。需要一个附加参数规定不同的访问级别,此参数即FileAccess参数。

FileStream aFile = new FileStream("a.txt",FileMode.OpenOrCreate,FileAccess.Write);

此行代码将打开文件,对文件进行写访问。对文件的任何读的企图都会导致抛出异常。仅有3种类型的FileAccess枚举:Read,ReadWirte和Write。可以打开一个文件,只读、只写或进行读写操作。此属性的作用是:基于用户的身份验证级别改变用户对文件的访问。