在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在.NET框架中进行的所有IO操作都要用到流(Stream)。 System.IO命名空间中包含许多IO相关的类,C#文件读写的类几乎都在其中,下面对其进行详细介绍。 主要类列表:
另外在System.IO.Compression名称空间的类,可用于GZIP或Deflate压缩文件的读写:
从上表可以看到有多种可用于处理文件IO的流,最重要的类型是FileStream类,它提供了读写文件的功能。其他的还有BufferedStream, CryptoStream, MemoryStream和NetworkStream等。 File类
FileInfoFileInfo类和File类有许多方法相同,但不是静态类,可实例化,用于表示磁盘或网络位置上的文件。如: FileInfo aFile = new FileInfo("Version.hpp"); FileInfo和File类由许多类似的方法,如下: FileInfo aFile = new FileInfo("Version.hpp"); if(aFile.Exists) Console.WriteLine("File Exists"); if(File.Exists("Version.hpp")) Console.WriteLine("File Exists"); 这段代码检查文件Version.hpp是否存在,这里没有指定目录信息,此时为当前工作目录。 什么使用使用FileInfo,什么时候使用File,可以遵循以下原则:
FileInfo类也提供了许多与底层文件相关的属性,大多属性继承于FileSystemInfo,可应用于File和Directory类。FileSystemInfo类的属性如下:
FileInfo专用属性
Directory类Directory和DirectoryInfo类都可以方便地对文件夹进行操作。 Directory类包含用于文件夹操作的静态方法。下面是常用方法说明:
其中,EnumerateXxx()方法时.NET 4新增的,在存在大量文件或目录时,其性能比对应的GetXxx()方法好。 DirectoryInfoDirectoryInfo它表示一个目录,且和Directory有许多类似方法,选择规则和使用File,FileInfo一样:
DirectoryInfo类的大多数属性继承自FileSystemInfo,另有两个专用属性:
绝对路径和相对路径相对路径名相对于一个起始位置,当前工作目录就是起点。例如,如果应用程序运行在C:\Development\FileDemo目录,并使用相对路径LogFile.txt,则其绝对路径为:C:\Development\FileDemo\LogFile.txt 移到上层目录,使用..字符串。路径..\Log.txt,其绝对路径为: C:\Development\LogFile.txt 使用VS时,工作目录通常为 ProjectName\bin\Debug,要访问项目根文件夹中的文件,必须使用..\..\上移两个目录。 根据需要,可以使用Directory.GetCurrentDirectory()获取工作目录,也可以使用Directory.SetCurrentDirectory()设置新路径。
FileStreamFileStream表示指向文件的流。该类提供了在文件中读写字节的方法。不过StreamReader和StreamWriter用的更多,因为它们操作的是字符数据,更易于使用。不过有些操作,如随机文件访问,必须使用FileStream。 FileStream常用属性
FileStream常用方法
构造函数FileStream aFile = new FileStream(filename, FileMode.Member); FileStream aFile = new FileStream(filename, FileMode.Member, FileAccess.Member); FileMode枚举用于指定如何打开或创建文件。FileAccess指定流的作用。 FileAccess枚举成员:
对文件进行非FileAccess枚举成员指定的操作会抛出异常,该属性的作用是,基于用于的身份验证级别提供对应的访问权限。 FileMode枚举成员:
File和FileInfo提供的OpenRead()和OpenWrite()方法,可方便的创建FileStream对象。 FileStream aFile = File.OpenRead("Date.txt"); FileInfo aFileInfo = new FileInfo("Date.txt"); FileStream aFile = aFileInfo.OpenRead(); 文件位置FileStream类维护文件内部指针,通过Seek()方法,可调整指针位置: Seek()方法有两个参数:第一个参数表示指针移动距离(以字节为单位);第二个参数表示起始位置,以枚举SeekOrigin表示,SeekOrigin枚举包含3个值:Begin、Current和End。 例如,下面的代码将文件指针移动到文件的第8个字节: aFile.Seek(8, SeekOrigin.Begin);
将指针从当前位置向后移动2个字节,如果在上面的代码行之后执行,文件指针就指向文件的第10个字节: aFile.Seek(2, SeekOrigin.Current);
也可以反向查找,同SeekOrigin.End枚举值一起使用,查找靠近文件末端的位置。如查找文件倒数第5个字节: aFile.Seek(-5, SeekOrigin.End);
读取数据使用FileStream类读取数据没有StreamReader容易,因为FileStream只能处理原始字节。其优点是可以处理任何数据文件,而不仅限于文本文件。所以FileStream对象可用于读取图像、声音等文件。 FileStream.Read()是FileStream读取文件的主要方法。它有三个参数:第一个参数为字节数组,用来接收FileStream对象中的数据;第二个参数时字节数据中开始写入数据的位置,通常是0;第三个参数指定读出的字节数目。 byte[] byData = new byte[200]; char[] charData = new char[200]; try { FileStream aFile = new FileStream("../../FileStreamTest.cs", FileMode.Open); aFile.Seek(113, SeekOrigin.Begin); aFile.Read(byData, 0, 200); } catch (Exception e) { Console.WriteLine("An IO exception has been thrown!"); Console.WriteLine(e.ToString()); return; } Decoder d = Encoding.UTF8.GetDecoder(); d.GetChars(byData, 0, byData.Length, charData, 0); Console.WriteLine(charData); StreamWriterStreamWriter或StreamReader对FileStream进行包装,直接对文件进行操作,但不能将文件指针改变到任意位置。 StreamWriter常用属性
StreamWriter常用方法
创建StreamWriter:FileStream aFile = new FileStream("Log.txt", FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(aFile); 也可以直接从文件创建: StreamWriter sw = new StreamWriter("Log.txt",true); Boolean值的含义:
StreamWriter没有像FileStream类那样的FileMode选项,所以要设置这些属性,需在FileStream中预先设置好,然后以FileStream创建StreamWriter。 using System; using System.Collections.Generic; using System.Ling; using System.Text; using System.IO; namespace Test { public class Program{ static void Main(string[] args){ try { FileStream aFile = new FileStream("Log.txt", FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(aFile); sw.WriteLine("Hello to you."); sw.WriteLine("It is now {0} and things are looking good.", DateTime.Now.ToLongDateString()); sw.Write("More than that,"); sw.Write(" it's {0} that C# is fun.", true); sw.Close(); } catch (IOException e) { Console.WriteLine(e); } } } } 运行,在项目下的bin\Debug下,可以找到Log.txt文件。 StreamReader用于读取文本文件的专用类,StreamReader可以从底层Stream对象创建StreamReader实例,而且还能指定编码。 StreamReader常用方法
二进制文件操作IO流的二进制文件操作主要用到BinaryWriter和BinaryReader类。 BinaryWriterBinaryWriter类以二进制形式将数据写入流,并制定制定编码 常用方法
BinaryReaderBinaryReader使用特定编码将数据读作二进制值。 常用方法
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论