文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合。当打开文件进行读写时,它变成一个流。
从根本上说,流是通过通信路径传递的字节序列。有两个主要的流:输入流 和输出流。输入流用于从文件读取数据(读操作),输出流用于向文件写入数据(写操作)。
System.IO.File类和System.IO.FileInfo类主要提供用于执行各种文件的操作,如创建和删除文件、读取或写入文件,打开或关闭文件等。另外有时我们还会用到System.IO.Path类、Directory类等,在使用时要引用System.IO命名空间。
C#File类为我们提供了一些对文件的操作方法,下面就为大家介绍一些: 文件创建方法:File.Create
该方法的声明如下:public static FileStream Create(string path)。下面的代码演示如何在当前目录下创建名为e1.txt的文件。
FileStream NewText=File.Create(@"e1.txt");
NewText.Close();
文件打开方法:File.Open
该方法的声明如下:public static FileStream Open(string path, FileMode mode)。下面的代码打开存放在当前目录下名称为e1.txt文件,并在该文件中写入hello。
FileStream TextFile=File.Open(@"e1.txt",FileMode.Append); //以打追加方式打开文件
byte [] Info={(byte)'h',(byte)'e',(byte)'l',(byte)'l',(byte)'o'};
TextFile.Write(Info,0,Info.Length); //写入数据
TextFile.Close(); // 关闭文件
文件删除方法:File.Delete
该方法声明如下:public static void Delete(string path)。下面的代码演示如何删除当前目录下的e1.txt文件。
File.Delete(@"e1.txt");
判断文件是否存在的方法:File.Exist
该方法声明如下:public static bool Exists(string path);下面的代码判断是否存在e1.txt文件。
if(File.Exists(@"e1.txt")) //判断文件是否存在
{…}//处理代码
对一个路径做相应操作,包括文件路径,目录路径。通常会用到Path这个类。下面就介绍Path类提供的一些方法。
1.更改路径字符串的扩展名
public static string ChangeExtension(string path,string extension)
参数:path(String)为要修改的路径信息,extension(String)为新的扩展名;返回值为String型修改后的路径字符串。
string s =Path.ChangeExtension(@"course\demo.cs", "");//返回:"course\demo."
2.合并两个字符路径字符串
public static string Combine(string path1,string path2)
参数:path1(String)为第一个路径,path2(String)为第二个路径;返回值为String型合并后的路径字符串。
string path1 = @"course";
string path2 = @"install.txt";
string s4 = Path.Combine(path1, path2);
//返回:"course/install.txt"
3.获取指定路径字符串的目录信息
public static string GetDirectoryName(string path)
如下代码实例:
string fileName = @"a.txt";
Path.GetDirectoryName(fileName);
4.获取指定路径字符串的扩展名
public static string GetExtension(string path)
string fileName = @""course\myfile.ext"";
string path = @"course\mydir\";
string extension=Path.GetExtension(fileName); //返回 : ".ext"
string pe=Path.GetExtension(path); //返回 :""
Directory类位于System.IO 命名空间。Directory类提供了在目录和子目录中进行创建移动和列举操作的静态方法。此外,你还可以访问和操作各种各样的目录属性。
1.目录创建方法:public static DirectoryInfo CreateDirectory(string path);
Directory.CreateDirectory(@"course\NewDirectoty");
2.目录删除方法:public static void Delete(string path,bool recursive);
Directory.Delete(@"course\NewDirectoty",true);
3.获取当前目录下的所有子目录名的方法:public static string[] GetDirectories(string path);
string [] Directorys;
Directorys = Directory. GetDirectories (@"course");
4.获取当前目录下的所有文件名的方法:public static string[] GetFiles(string path);
string [] Files;
Files = Directory.GetFiles (@"course");
5.判断目录是否存在方法:public static bool Exist(string path);
if(File.Exists(@"course")) //判断目录是否存在
{
GetDirectory(); //获取子目录
GetFile(); //获取文件
MoveDirectory(); //移动目录
DeleteDirectory(); //删除目录
}
else
{
MakeDirectory(); //生成目录
SetDirectory(); //设置目录属性
}
FileStream类读写文件
使用 System.IO 命名空间中的 FileStream 类读写文件。该类派生自抽象类 Stream。如下代码:
/*----------读取文件-----------*/
byte[] byData = new byte[100];
FileStream sFile = new FileStream("a.txt",FileMode.Open); //读取a.txt的内容
sFile.Seek(0, SeekOrigin.Begin); //设置流的当前位置为文件的开始位置;
sFile.Read(byData, 0, 100); //将文件的内容读入到字节数组中;
/*----------写入文件-----------*/
FileStream fs = new FileStream("b.txt",FileMode.Create); //创建要写入数据的文件
byte [] data =new UTF8Encoding().GetBytes("hello world!"); //将要写的内容存入字节数组中
fs.Write(data,0,data.Length); //写入字节数据
fs.Flush();
fs.Close(); //关闭文件
使用StreamReader和StreamWriter类
StreamReader类提供了读取文件的方法,而StreamWriter类提供了写入文件的方法。
/*----------读取文件-----------*/
FileStream fs = File.Open("a.txt", FileMode.Open, FileAccess.Read); // 打开文件a.txt
StreamReader sr=new StreamReader(fs, Encoding.GetEncoding("gb2312")); //声明并初始化StreamReader
string line=sr.ReadLine(); //通过StreamReader的ReadLine方法读取一行数据
sr.Close();
fs.Close();
/*----------写入文件-----------*/
FileStream fs = new FileStream("bb.txt", FileMode.Create); //创建要写入数据的文件
StreamWriter sw = new StreamWriter(fs); //声明并初始化StreamReaderWriter
sw.Write("123"); // 通过StreamWrite的Write方法写入数据
sw.Flush();
fs.Close();
流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。除了和磁盘文件直接相关的文件流以外,流还有多种类型。
我们在文件的读写中已经介绍了文件流,像FileStream,在这里我们再来介绍一下MemoryStream类,继承自Stream类。
MemoryStream类用于向内存而不是磁盘读写数据。MemoryStream封装以无符号字节数组形式存储的数据,该数组在创建MemoryStream对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。下面列出了MemoryStream类的重要方法:
using System;
using System.IO;
using System.Text;
namespace MemoryStreamApp
{
class Program
{
static void Main(string[] args)
{
//构造MemoryStream实例,并输出初始分配容量及使用大小
MemoryStream mem = new MemoryStream();
Console.WriteLine("init total size:{0}", mem.Capacity);
Console.WriteLine("init use size:{0}", mem.Length);
//将待写入的数据从字符串转换为字节数组
UnicodeEncoding encoder = new UnicodeEncoding();
byte[] bytes = encoder.GetBytes("add data");
//向内存流中写入数据
for (int i = 1; i < 4; i++)
{
Console.WriteLine("write data {0} times.", i);
mem.Write(bytes, 0, bytes.Length);
}
//写入数据后 MemoryStream 实例的容量和使用大小
Console.WriteLine("now size:{0}", mem.Capacity);
Console.WriteLine("already used size:{0}", mem.Length);
}
}
}