C#之入门总结_文件_1_13
在计算机中,无论是文本、图片、音频还是视频,所有的文件都是以二进制(字节)形式存储的。为此,C#专门针对文件的输入/输出操作提供了一系列的流,统称为文件流。文件流是程序中最常用的流,根据数据的传输方向可将其分为输入流和输出流。为了方便理解,可以把输入流和输出流比作两根“水管”,如图所示:
流中的输入/输出都是相对于程序而言的
在 C#中对文件操作的类都位于 System.IO 命名空间中,因此在使用这些类时需要引入System.IO命名空间。该命名空间中包含了很多类,为了方便初学者更好地学习,接下来通过一个图例来介绍System.IO命名空间中的常用类,如图所示。
这些类大致可分为操作目录的类、操作文件的类、操作文件路径的类等。其中,Directory类和DirectoryInfo类属于操作目录的类,FileStream类、File类和FileInfo 类属于操作文件的类,StreamReader 类、StreamWriter 类属于操作文本文件的类,Path类属于操作文件路径的类。
这就是文件引入的原因,和用处!
相对路径是指当前文件相对于其他文件(或文件夹)之间的路径关系。例如在路径D:\itcast\a\b\下有程序文件“b.cs”和文本文件“a.txt”这两个文件,那么相对于“b.cs”文件来说,“a.txt”文件就是在同一文件目录下,所以在“b.cs”文件中调用“a.txt”文件直接写文件名便可。相对路径使用符号“/”表示,具体使用方式如下。
● 在斜杠前面加一个点(./)表示上一级目录;
● 在斜杠前面加两个点(../)表示当前文件的根目录。
绝对路径是指文件在磁盘上的的完整路径,例如 b.cs 程序调用 a.txt 时,填写“D:\itcast\a\b\a.txt”,在程序中使用绝对路径时需要注意该路径的位置,当该位置发生改变时可能会导致异常。
流可以对文件的内容进行读写操作,而在应用程序中还可能会对文件自身进行一些操作,例如创建、删除或者重命名某个文件,判断磁盘上某个文件是否存在等。针对这些操作,C#中提供了File类和FileInfo类这两个类
File 类是一个静态类,它提供了许多静态方法,用于处理文件,使用这些方法可以对文件进行创建、移动、查询和删除等操作,接下来介绍 File 类的一些常用的静态方法,如表所示。
}
//文件创建
static void Test01(string path)
{
//文件的创建
if (File.Exists(path))
{
Console.WriteLine("文件已经存在");
}
else
{
//如果不存在则创建文件
File.Create(path);
}
}
//文件的移动 和文件的重命名
static void Test02(string sourcePath,string destPath)
{
File.Move(sourcePath, destPath);
}
static void Test04(string path)
{
//从文件读取数据的流
FileStream fs = File.Open(path, FileMode.OpenOrCreate, FileAccess.Read);
byte[] byteArr = new byte[4096];
int len = 0;
string destPath = @"D:\FileTest\1707A\Newaa.txt";
//写入文件的流
FileStream fsWrite = File.Open(destPath, FileMode.OpenOrCreate, FileAccess.Write);
//len表示 在调用Read方法的时候 从文件中实际读取的字节数
while ((len = fs.Read(byteArr, 0, byteArr.Length)) != 0)
{
fsWrite.Write(byteArr, 0, len);
}
static void Test01(string sourcePath,string destPath)
{
FileStream fsRead = null;
FileStream fsWrite = null;
try
{
fsRead = new FileStream(sourcePath, FileMode.OpenOrCreate, FileAccess.Read);
fsWrite = new FileStream(destPath, FileMode.OpenOrCreate, FileAccess.Write);
int temp = -1;
while ((temp = fsRead.ReadByte()) != -1)
{
fsWrite.WriteByte((byte)temp);
}
}
catch (IOException e)
{
Console.WriteLine(e.Message);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
fsRead.Close();
fsWrite.Close();
}
}
ileInfo类与File类有些类似,它们都可以对磁盘上的文件进行操作。不同的是FileInfo类是实例类,所有的方法都只能在实例化对象后才能调用。创建 FileInfo 类对象时必须传递一个文件路径作为参数,具体语法格式如下。
FileInfo aFile = new FileInfo(@"C:\Data.txt");
上述代码表示使用 FileInfo 类创建一个对象,将文件路径作为参数,而路径中“@”符号表示不解析转义字符,如果没有“@”前缀就需要用“\\”替代“\”。通过前面的学习可知,“\”是一个转义字符,在程序中要表示一个“\”就需要使用“\\”。例如下面这句代码。
FileInfo aFile = new FileInfo("C:\\Data.txt");
FileInfo类除了有许多与File类相似的方法外,同时也有它特有的属性
static void Main(string[] args)
{
string path = @"D:\FileTest\1707A\aa.txt";
string destPath = @"D:\FileTest\1707A\bb.txt";
Test01(path,destPath);
}
static void Test01(string path,string destPath)
{
FileInfo fi = new FileInfo(path);
//获取当前文件所在的目录
Console.WriteLine(fi.Directory);
//获取当前文件所在的目录
Console.WriteLine(fi.DirectoryName);
//判断文件是否是只读的
Console.WriteLine(fi.IsReadOnly);
//获取文件的大小 单位是字节
Console.WriteLine(fi.Length);
//类似拷贝 复制操作 如果目标目录下面有相同的文件 则会抛出异常
//fi.CopyTo(destPath);
//类似剪切操作
//fi.MoveTo(@"D:\FileTest\1707A\YY\bb.txt");
StreamWriter sw = fi.AppendText();
sw.Write("abcdefg");
//强制刷出缓冲区中的数据
sw.Flush();
//关闭流
sw.Close();
}
在程序开发中,不仅需要对文件进行操作,而且还需要对文件目录进行操作。例如创建目录,删除目录等,为此C#提供了Directory类和DirectoryInfo类。
Directory类是静态类,提供了许多静态方法用于对目录进行操作,例如创建、删除、查询和移动目录等。
static void Main(string[] args)
{
string path = @"D:\FileTest\1707A\ZZ";
Test01(path);
}
static void Test01(string path)
{
//Directory.CreateDirectory(path);
//获取当前文件夹所在文件目录的信息
DirectoryInfo di = Directory.GetParent(path);
//
Console.WriteLine(di.FullName);
}
DirectoryInfo类的功能与Directory类相似,不同的是DirectoryInfo是一个实例类,该类不仅拥有与Directory类功能相似的方法,而且还具有一些特有的属性。下面图中是常用的属性