使用FIle的静态方法进行文件操作
1 //使用file的静态方法进行复制 2 File.Copy(path, destpath); 3 //使用File的静态方法删除路径下的一个文件 4 File.Delete(path); 5 //使用File的静态方法移动路径下的一个文件 6 File.Move(path, destpath); 7 File.ReadAllText(path); //打开一个文本文件*.txt ,读取文件中数据,然后关闭该文件 8 //写入 9 File.WriteAllText(path, "要写入文件的字符串"); //创建一个文件,向其中写入数据,如果此路径下有同名文件则会覆
PS:对文件进行写入操作,如果路径下有同名文件则会进行覆盖,所以最好进行一次判断,跟用户交互一下在进行覆盖
实例化FileInfo进行操作
1 FileInfo myfile = new FileInfo(path); //声明一个对象对某一个文件进行操作 2 myfile.CopyTo(destpath); //对文件进行复制操作,复制路径为destpath 3 myfile.MoveTo(destpath); //进行移动操作 4 myfile.Delete(); //进行删除操作
获取某一文件或文件夹的纤细信息(纤细日期,最后一次修改日期等等)
1 获取一个文件,或者文件夹的详细信息。(创建日期,文件名等) 2 FileInfo myfile = new FileInfo(path); //声明一个对象对某一个文件进行操作 3 DateTime dt = myfile.CreationTime; //获取或设置文件/文件夹的创建日期 4 string filepath = myfile.DirectoryName; //仅能用于FileInfo,获得完整的路径名,路径+文件名 5 bool file = myfile.Exists; //此属性的值表示文件或文件夹是否存在,存在会返回True 6 string fullname = myfile.FullName; //获取文件或文件夹的完整路径名 7 DateTime lastTime = myfile.LastAccessTime; //获取或设置最后一次访问文件或文件夹的时间 8 DateTime lastWrite = myfile.LastWriteTime; //获取或设置最后一次修改文件夹或文件夹的时间 9 string name = myfile.Name; //获取文件名,不能修改哦 10 long length = myfile.Length; //返回文件的字节大小 11 //CreationTime,LastAccessTime,LastWriteTime都是可以被修改的。
如何选择用File还是FileInfo
Directory/File只包含静态方法,不能被实例化,只需要提供合适的文件系统对象路径就可以使用,使用效率较高
当只对文件或文件夹执行一次操作,使用这些就很有效。
DirectoryInfo/FileInfo 如果使用一个对象执行多个操作,使用这些类就很高效。
因为它们在构造时就读取了文件系统对象的身份验证和其他信息,无论调用了多少方法,都不需要再次读取这些信息。
文件操作概述
-
驱动器
在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一个驱动器。.NET Framework提供DriveInfo类和 DriveType枚举型,以方便在程序中直接使用驱动器。DriveInfo类的常用字段成员有DriveFormat(文件系统格式,如NTFS或FAT32)、DriveType(驱动器类型)、Name(驱动器名)、TotalSize(总空间)、TotalFreeSpace(获得驱动器可用空间)。常用的方法成员有GetDrives(获得可用驱动器列表)。
DriveType枚举型的枚举值有CDRom(光驱)、Fixed(硬盘)、Network(网络驱动器)和Removeable(软盘或U盘)等。例如,以下代码可以输出每一个硬盘驱动器的剩余空间信息。
1 DriveInfo[] drivers = DriveInfo.GetDrives(); 2 foreach(DriveInfo driver in drivers) 3 { 4 if(driver.DriveType == DriveType.Fixed && driver.DriveFormat == "NTFS") 5 { 6 Console.WriteLine("在{0}驱动器上还有{1}字节的剩余空间。", driver.Name, driver.AvailableFreeSpace); 7 } 8 } 9 Console.ReadLine();
-
目录
为了方便检索文件,需要在驱动器中先创建目录,然后把文件保存到这个目录中。在Windows操作系统中,目录又称文件夹。每个驱动器都有一个根目录,使用”\”表示,如”C:\”表示C驱动器的根目录。创建在根目录中的目录称为一级子目录。在一级子目录中创建的目录称为二级子目录,依此类推。文件系统的目录结构是一种树形结构。
.NET Framework提供了Directory类和DirectoryInfo类,以方便在程序中直接操作目录。
Directory类的常用方法成员有CreateDirectory(创建新目录)、Delete(删除目录)、Exists(判断目录是否存在)、Move(移动目录)、GetFiles(获得目录的文件列表)、GetDirectories(获得子目录列表)等。
DirectoryInfo类的常用字段成员有Name(提取目录名)、Exists(判断目录是否存在)、Parent(父目录)、Root(根目录)、MoveTo(移动目录)、GetFiles(获得目录的文件列表)、GetDirectories(获得子目录列表)等。例如,以下代码分别展现了Directory类和DirectoryInfo类的基本方法。
1 Directory.CreateDirectory(@"d:\C#程序设计"); 2 if(Directory.Exists(@"d:\C#程序设计")) 3 { 4 Console.WriteLine("创建成功"); 5 } 6 Directory.Delete(@"d:\C#程序设计"); 7 if (!Directory.Exists(@"d:\C#程序设计")) 8 { 9 Console.WriteLine("删除成功"); 10 } 11 12 DirectoryInfo dir = new DirectoryInfo(@"d:\C#程序设计"); 13 if (!dir.Exists) 14 { 15 dir.Create(); 16 } 17 else 18 { 19 Console.WriteLine("该目录已经存在"); 20 }
-
文件
.NET Framework提供了File类和FileInfo类,以方便在程序中直接操作文件。File和FileInfo类位于System.IO命名空间,都可以用来实现创建、复制、移动、打开文件等操作。File类和FileInfo类与Directory类和DirectoryInfo类的工作方式相似。File类是一个静态类,可直接调用其方法成员。FileInfo类不是静态类,需要先创建实例。
-
文件类File常用方法
常 用 方 法 |
介 绍 |
Open() |
打开文件 |
Create() |
创建文件 |
Copy() |
复制文件 |
Delete() |
删除文件 |
Exists() |
判断文件是否存在 |
Move() |
移动文件 |
Replace() |
替换文件 |
AppendAllText() |
新建文件并添加文本 |
ReadAllText() |
打开并读取文本内容 |
-
文件信息类FileInfo
文件信息类FileInfo与File类不同,它虽然也提供类创建、复制、删除、移动和打开文件的方法,并且帮助创建FileStream对象,但是它提供的仅仅是实例方法。下表分别展示类FileInfo类的常用字段和方法。
常用字段 |
介绍 |
Name |
提取文件名 |
Directory |
所属目录 |
Exists |
是否存在(继承自父类FileSystemInfo) |
Extension |
文件扩展名 |
Length |
文件长度 |
IsReadOnly |
是否为只读 |
常用方法 |
介绍 |
Open() |
打开文件 |
Create() |
创建文件 |
CopyTo() |
复制到新文件 |
Delete() |
删除文件 |
MoveTo() |
移动文件 |
Replace() |
替换文件 |
EnCrypt() |
加密文件 |
Decrypt() |
解密文件 |
-
路径
每个驱动器包含一个或多个目录,而每个目录又可以包含一个或多个子目录,目录的结构为树形结构。一个文件只能保存在树形结构的某个特定的目录中,文件所在位置为路径。要检索文件时,必须首先确定文件的路径。路径由驱动器盘符、目录名、文件名、文件扩展名和分隔符组成,有两种种表示方法:一种是从驱动器的根目录开始书写,如C:\Windows\System32\notepad.exe,这种路径称为绝对路径;另一种是从当前目录位置开始书写,如System32\notepad.exe(假设当前目录为C:\Windows),这种路径称为相对路径。
在C#中,使用文件和目录路径时要十分谨慎。C#将反斜杠”\”字符视作转义符,因此当路径表示为字符串时,要使用两个反斜杠表示,例如:
“C:\\Windows\\System32\\notepad.exe”
另外,C#允许在字符串前添加”@”标志,以提示编译器不要把”\”字符视作转义符,而视作普通字符,例如:
@”C:\Windows\System32\notepad.exe”
.NET Framework提供了Path类,以帮助在程序中管理文件和目录路径,Path类位于System.IO命名空间,是一个静态类,可以用来操作路径的每一个字段,如驱动器盘符、目录名、文件名、文件扩展名和分隔符等。Path类的常用字段成员有PathSeperator(路径分隔符,如”;”)、DirectorySeparatorChar(目录分隔符,如”\”)、VolumeSeparator(卷分隔符,如”:”)、AltDirectorySeparator(替换目录分隔符,如”/”),常用的方法成员有GetDirectoryName(取目录名)、GetFileName(取文件名)、GetExtension(取文件扩展名)、GetFullPath(取完整路径)、GetTempPath(取操作系统的临时文件路径)等,例如,以下代码表示提取并显示路径中的目录名和文件名。
1 tring path = @"c:\windows\System32\notepad.exe";
2 Console.WriteLine(Path.GetDirectoryName(path));
3 Console.WriteLine(Path.GetFileName(path));
-
文件流操作
在.NET Framework中,文件和流是有区别的。文件是存储在磁盘上的数据集,它具有名称和相应的路径。当打开一个文件并对其进行读/写时,该文件就称为流(stream)。但是,流不仅仅是指打开的磁盘文件,还可以是网络数据。.Net Framework允许在内存中创建流。此外,在控制台应用程序中,键盘输入和文本显示都是流。流包括以下基本操作:
* 读取(read):把数据从流传输到某种数据结构中,如输出到字符数组中。
* 写入(write):把数据从某种数据结构传输到流中,如把字节数组中的数据传输到流中。
* 定位(seek):在流中查找或重新定位当前位置。
-
操作流的类
-
Stream类
Stream类是所有流的抽象基类。Stream类的主要属性有CanRead(是否支持读取)、CanSeek(是否支持查找)、CanTimeout(是否可以超时)、CanWrite(是否支持写入)、Length(流的长度)、Position(获取或设置当前流中的位置)、ReadTimeout(获取或设置读取操作的超时时间)、WriteTimeout(获取或设置写操作的超时时间),主要方法有BeginRead(开始异步读操作),BeginWrite(开始异步写操作)、Close(关闭当前流)、EndRead(结束异步读操作)、EndWrite(结束异步写操作)、Flush(清除流的所有缓冲区并把缓冲数据写入基础设备)、Read(读取字节序列)、ReadByte(读取一个字节)、Seek(设置查找位置)、Write(写入字节序列)、WriteByte(写入一个字节)。
-
FileStream MemoryStream和BufferedStream类
文件流类FileStream以流的形式读、写、打开、关闭文件。另外,它还可以用来操作诸如:管道、标准输入/输出等其他与文件相关的操作系统句柄。
内存流MemoryStream类用来在内存中创建流,以暂时保持数据,因此有了它就无须在硬盘上创建临时文件。它将数据封装为无符号的字节序列,可以直接进行读、写、查找操作。
缓冲流BufferedStream类表示把流先添加到缓冲区,再进行数据的读/写操作。缓冲区是存储区中用来缓存数据的字节块。使用缓冲区可以减少访问数据时对操作系统的调用次数,增强系统的读/写功能。
注意,FileStream类也有缓冲功能,在创建FileStream类的实例时,只需要指定缓冲区的大小即可。
-
StreamReader和StreamWrite类
流读取器StreamReader类用来以一种特定的编码(如:UTF-8)从字节流中读取字符,流写入器StreamWriter类用来以一种特定的编码(如:UTF-8)向流中写入字符。StreamReader和StreamWriter类一般用来操作文本文件。
-
BinaryReader和BinaryWriter
BinaryReader类用特定的编码将基元数据类型读作二进制。BinaryWriter类以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。
-
文件流类FileStrem
文件流类FileStream公开了以文件为主的Stream,既支持同步读/写操作,也支持异步读/写操作,FileStream类的特点是操作字节和字节数组。这种方式不适合操作用字符数据构成的文本文件,适合处理非文本文件。FileStream类提供了对文件的低级而复杂的操作,因此能够实现更多高级的功能。
以下为FileStreamWriter代码演示:
1 //要写入文件的字符数组 2 char[] m_cDataWrite = new char[100]; 3 //包含要写入该流的数据的缓冲区 4 byte[] m_bDataWrite = new byte[100]; 5 6 try 7 { 8 //创建d:\file.txt的FileStream对象 9 FileStream m_FileStream = new FileStream(@"d:\file.txt", FileMode.OpenOrCreate); 10 //将要写入的字符串转换成字符数组 11 m_cDataWrite = "test filestream".ToCharArray(); 12 13 //通过UTF-8编码方法将字符数组转成字节数组 14 Encoder m_Enc = Encoding.UTF8.GetEncoder(); 15 m_Enc.GetBytes(m_cDataWrite, 0, m_cDataWrite.Length, m_bDataWrite, 0, true); 16 17 //设置流当前位置为文件开始位置 18 m_FileStream.Seek(0, SeekOrigin.Begin); 19 //将字节数组中的内容写入文件 20 m_FileStream.Write(m_bDataWrite, 0, m_bDataWrite.Length); 21 if (m_FileStream != null) 22 { 23 //清除此流的缓冲区,使得所有缓冲的数据都写入到文件中 24 m_FileStream.Flush(); 25 m_FileStream.Close(); 26 } 27 } 28 catch (Exception ex) 29 { 30 Console.WriteLine("There is an IOException"); 31 Console.WriteLine(ex.Message); 32 } 33 Console.WriteLine("Write to File Succeed!");
以下为FileStreamReader代码演示:
1 //要写入文件的字符数组 2 char[] m_cDataWrite = new char[100]; 3 //包含要写入该流的数据的缓冲区 4 byte[] m_bDataWrite = new byte[100]; 5 6 try 7 { 8 //创建d:\file.txt的FileStream对象 9 FileStream m_FileStream = new FileStream(@"d:\file.txt", FileMode.Open); 10 11 //设置流当前位置为文件开始位置 12 m_FileStream.Seek(0, SeekOrigin.Begin); 13 //将文件的内容存到字节数组中(缓存) 14 m_FileStream.Read(m_bDataWrite, 0, 100); 15 } 16 catch (Exception ex) 17 { 18 Console.WriteLine("There is an IOException"); 19 Console.WriteLine(ex.Message); 20 } 21 22 //通过UTF-8编码方法将字符数组转换成字符数组 23 Decoder m_Dec = Encoding.UTF8.GetDecoder(); 24 m_Dec.GetChars(m_bDataWrite, 0, m_bDataWrite.Length, m_cDataWrite, 0); 25 Console.WriteLine("Read from file Succeed!"); 26 Console.WriteLine(m_cDataWrite);
-
StreamWriter和StreamReader类
应用FileStream类需要许多额外的数据类型转换操作,十分影响效率。StreamWriter类允许直接将字符和字符串写入文件。下面演示其用法:
1 try 2 { 3 //保留文件现有数据,以追加写入的方式打开d:\file.txt文件 4 StreamWriter m_SW = new StreamWriter(@"d:\file.txt", true); 5 //向文件写入新字符串,并关闭StreamWriter 6 m_SW.WriteLine("Another File Operation Method"); 7 m_SW.Close(); 8 } 9 catch (Exception ex) 10 { 11 Console.WriteLine("There is an IOException"); 12 Console.WriteLine(ex.Message); 13 } 14 StreamWriter类提供了另一种从文件中读取数据的方法,下面演示其用法: 15 try 16 { 17 //以绝对路径方式构造新的StreamReader对象 18 StreamReader m_SR = new StreamReader(@"d:\file.txt"); 19 20 //用ReadToEnd方法将d:\file.txt中的数据全部读入到字符串m_Data中,并关闭StreamReader 21 string m_Data = m_SR.ReadToEnd(); 22 m_SR.Close(); 23 Console.WriteLine(m_Data); 24 } 25 catch (Exception ex) 26 { 27 Console.WriteLine("There is an IOException"); 28 Console.WriteLine(ex.Message); 29 }
-
BinaryReader和BinaryWriter类
BinaryWriter类是除了FileStream和StreamWriter类之外另一种向文件写入数据的方式,与之前两种方式不同,BinaryWriter类将基础数据(如:字符串)以二进制形式写入文件流中,并支持用特定的编码写入。下面演示其用法:
1 FileStream m_FS = new FileStream(@"d:\data.dat", FileMode.Create); 2 //通过文件流创建相应的BinaryWriter 3 BinaryWriter m_BW = new BinaryWriter(m_FS); 4 for(int i = 0; i < 11; i++) 5 { 6 //向d:\data.dat中写入数据 7 m_BW.Write((int)i); 8 } 9 10 m_BW.Close(); 11 m_FS.Close();
代码中首先给出了文件夹的路径,利用BinaryWriter类的Write方法向文件中写入部分二进制字符。该文件是以二进制存储的,因此用记事本打开时,将无法观察到正确的字符,必须使用支持二进制的文本阅读器。
BinaryReader类是和BinaryWriter类相对应的二进制数据读取类。它用特定的编码将基元数据类型(如:字符串类型)读作二进制值。
1 FileStream m_FS = new FileStream(@"d:\data.dat", FileMode.Open, FileAccess.Read); 2 //通过文件流创建相应的BinaryReader 3 BinaryReader m_BR = new BinaryReader(m_FS); 4 //从d:\data.dat中读取数据 5 for(int i = 0; i < 11; i++) 6 { 7 Console.WriteLine(m_BR.ReadInt32()); 8 } 9 10 m_BR.Close(); 11 m_FS.Close(); 12 13 Console.ReadLine();
标签:文件,Console,File,C#,写入,FileStream,WriteLine,操作 From: https://www.cnblogs.com/davisdabing/p/17817790.html