IO操作

MuyingBlog / 2023-08-12 / 原文

IO基础概念

lO操作:文件/文件夹 操作与读写。

文件夹: 用来管理计算机文件的,每一个文件夹对应一块磁盘空间,它提供了指向对应空间的地址它没有扩展名,也就不像文件的格式用扩展名来标识。

文件: 一个具有符号的一组相关联元素的有序序列。文件可以包含范围非常广泛的内容。系统和用户都可以将具有一定独立功能的程序模块、一组数据或一组文字命名为一个文件,它具有永久存储。

:是个字节序列,可用于对后备存储进行读取写入操作,后备存储可以是多个存储媒介之一(例如,磁盘或内存)。

Stream:支持读取和写入字节。所有表示流的类都继承自Stream类。

流涉及三个基本操作:

  • 读取 - 将数据从流传输到数据结构 (如字节数组) 中。
  • 写入- 将数据从数据源传输到流。
  • 查找 - 对流中的当前位置进行查询和修改。

IO命名空间常用类

System.lO命名空间里,常用的类:

  1. File
  2. Filelnfo.Directory
  3. Directorylnfo
  4. Path
  5. StreamReader
  6. StreamWriterFileStream
  7. MemoryStream
  8. BufferedStream
  9. BinaryReader
  10. BinaryWriter
  11. StringReader
  12. StringWriter
  13. Stream
  14. TextReader
  15. TextWriter

image-20230712161753286

1.文件路径操作:Path类简介

C#中的Path类提供了许多用于处理文件路径的方法。其中最常用的方法是GetFileName、GetFileNameWithoutExtension和GetDirectoryName。这些方法分别返回路径的文件名、不带扩展名的文件名以及文件夹目录的名称。此外,Path类还提供了GetFullPath方法,可以获取完整的文件路径。

在使用Path类时,需要先在路径的头部加上@符号,例如@C:\fuck.txt 。这样可以确保路径被正确解析并返回正确的结果。

除了常用的方法外,Path类还提供了一些其他有用的方法,例如CreateDirectory、Delete、Move等,可以用来创建、删除或移动文件或文件夹。同时,Path类还支持正则表达式,可以使用Regex类来进行复杂的路径匹配和处理。

总之,C#中的Path类是一个非常实用的工具,可以帮助我们方便地处理文件路径并进行各种操作。

C#中的Path类提供了一组方法,用于处理文件路径和目录。以下是一些常见的用法:

  1. 创建文件路径字符串:使用CreateDirectory、CreateFile或Combine方法创建一个文件路径字符串。例如:string path = Path.Combine(“C:\Users\JohnDoe”, “Documents”, “myfile.txt”);
  2. 获取当前工作目录:使用CurrentDirectory属性返回当前工作目录的路径。
  3. 获取完整路径:使用FullName属性返回完整路径,包括驱动器和文件夹名称。
  4. 获取只读文件路径:使用IsReadOnly属性检查文件是否为只读模式。
  5. 获取隐藏文件路径:使用IsHidden属性检查文件是否为隐藏模式。
  6. 获取系统文件路径:使用SystemFiles属性返回包含系统文件的目录列表。
  7. 获取扩展名:使用Extension属性返回文件扩展名。
  8. 获取文件名:使用FileName属性返回文件名。
  9. 获取文件大小:使用Length属性返回文件的大小(以字节为单位)。
  10. 获取文件类型:使用Type属性返回文件的类型(如文本文件、图像文件等)。
  11. 删除文件:使用Delete方法删除指定路径的文件。
  12. 移动文件:使用Move方法将文件从一个位置移动到另一个位置。
  13. 复制文件:使用Copy方法将文件从一个位置复制到另一个位置。
  14. 列出目录内容:使用EnumerateDirectories和EnumerateFiles方法分别列出指定目录下的所有子目录和所有文件。

总之,Path类提供了许多有用的方法和属性,可以方便地处理文件路径和目录。

定义 string filePath =@"E:/project/test/20180322.jpg";

方法 备注 效果
System.IO.Path.ChangeExtension(filePath, "txt") 更改路径字符串的扩展名 E:/project/test/20180322.txt
System.IO.Path.GetDirectoryName(filePath) 返回指定路径字符串的目录信息 E:/project/test/
System.IO.Path.GetExtension(filePath) 返回指定的路径字符串的扩展名 .jpg
System.IO.Path.GetFileName(filePath) 返回指定路径字符串的文件名和扩展名 20180322.jpg
System.IO.Path.GetFileNameWithoutExtension(filePath) 返回不具有扩展名的指定路径字符串的文件名 20180322
System.IO.Path.GetPathRoot(filePath) 获取指定路径的根目录信息 E:/
System.IO.Path.GetRandomFileName() 返回随机文件夹名或文件名 ct2h5b2h.sed
System.IO.Path.GetTempFileName() 创建唯一命名的零字节的临时文件并返回其绝对路径 C:/Documents and Settings/Randy/Local Settings/Temp/tmpAD.tmp
System.IO.Path.GetTempPath() 返回当前系统的临时文件夹的路径 C:/Documents and Settings/Randy/Local Settings/Temp/
System.IO.Path.HasExtension(filePath) 返回路径是否包括文件扩展名 True
System.IO.Path.IsPathRooted(filePath) 返回路径是绝对路径还是相对路径 Ture
System.IO.Path.Combine(@ "c: ", "b.txt ") 返回合并后的路径 C:/b.txt
System.IO.Path.GetFullPath("20180322.jpg") 查找文件并返回其绝对路径 E:/project/test/20180322.jpg

2.文件夹操作:DirectoryInfo类与Directory类操作

Directory类位于System.IO命名空间下,主要用来操作文件夹,常用操作有判断文件夹是否存在、创建文件夹、删除文件夹、剪切文件夹、获取文件夹下的全部或指定格式文件

DirectoryInfo类是一个密封类,它可以用来创建、移动、枚举目录和子目录。

Directory

创建一个文件夹;如果文件夹已经存在,就什么都不干:Directory.CreateDirectory

例:Directory.CreateDirectory(@"c:\a");这里是在C盘创建一个名为a的文件夹。

删除一个文件夹:Directory.Delete

默认的第二个参数是false,只能删除空目录;第二个参数为true的时候就可以删除文件夹连同文件夹里的所有文件。

例:Directory.Delete(@"c:\a",true);这里是删除C盘名为a文件夹。

移动文件夹的位置:Directory.Move

例:Directory.Move(@"c:\a", @"d:\new");将C盘a文件夹移动到d盘变成名为new的文件夹。

判断文件夹是否存在,返回布尔类型:Directory.Exists

例:Directory.Exists(@"c:\a");判断C盘名为a的文件夹是否存在。

获取目录下的所有文件的路径,返回到字符串数组:Directory.GetFiles

例:第二个参数是筛选出只有jpg格式的文件,如果不填第二个参数,则返回全部文件。
string[] path=Directory.GetFiles(@"c:\a","*.jpg");遍历C盘a文件夹里面jpg格式的文件路径,并且保存在path数组里面。

获取目录下所有文件夹的路径,返回字符串数组:Directory.GetDirectories

例:string[] path = Directory.GetDirectories(@"c:\a");遍历C盘a文件夹下所有的文件夹路径,并保存到path数组里面。

DirectoryInfo

DirectoryInfo类包括4个属性,可以用来获取目录的名称、父目录等。

  • Exists:判断指定目录是否存在。如果存在,则返回true,否则返回false。

  • Name:获取目录的名称。

  • Parent“获取指定子目录的父目录。

  • Root:获取路径的根部分。

    DirectoryInfo类还包括了以下9个属性,它们是从FileSystemInfo类继承而来。

  • Extension属性:获取文件扩展名部分。

  • FullName属性:获取完整目录。

  • Attributes属性:获取或设置当前目录的FileAttributes。

  • CreationTime属性:获取或设置当前目录的创建时间。

  • CreationTimeUtc属性:获取或设置当前目录的创建时间,其格式为协调通用时间。

  • LastAccessTime属性:获取或设置上次访问当前目录的时间。

  • LastAccessTimeUtc属性:获取或设置上次访问当前目录的时间,其格式为协调通用时间。

  • LastWriteTime属性:获取或设置上次写入当前目录的时间。

  • LastWriteTimeUtc属性:获取或设置上次写入当前目录的时间,其格式为协调通用时间。

  • DirectoryInfo类的实例方法说明

  • Create():创建目录。

  • GetDirectories():获取当前目录的子目录。

  • CreateSubdirectory():在指定路径中创建一个或多个子目录。

  • GetFiles():获取当前目录的文件列表。

  • Delete():删除指定的目录及其内容。

  • GetFileSystemInfos():获取当前目录的子目录和文件列表。

  • MoveTo():将指定目录及其内容移到新位置。

其中,Create()、Delete()和MoveTo()方法用来操作目录,它们依次可以用来创建、删除和移动目录。MoveTo()方法用来移动目录,它首先创建一个新目录(包括该目录的内容),然后再将被移动的目录删除。

Directory类和DirectoryInfo类的区别

  • Directory是公用的静态类,是公开建立、移动和全面列举目录和子目录的静态方法。
  • DirectoryInfo是实例类,是公开建立、移动和全面列举目录内和子目录的容执行个体 (Instance) 方法。

3.文件操作:File、FileInfo类

File :提供用于创建复制删除移动打开文件的静态方法,并协助创建FileStream对象。

Filelnfo :提供用于创建复制删除移动打开文件的实例方法,并协助创建FileStream 对象。

FileMode:打开文件的方式 Create CreateNew Append Open OpenOrCreate

FlleAccess: 文件访问权限 Read Write ReadWrite

创建  复制  删除  移动 文件流 写入流 读取

打开  追加  写入  读取

File类包含用于将内容写入文件的4种方法:

  • WriteAllText():创建文本,将字符串写入该文件,关闭文件
  • AppendAllText():将字符串附加到已有的文件
  • WriteAllLines():创建文件,将字符串数组写入该文件,关闭文件
  • WriteAllBytes():创建文件,将字节数组写入该文件,关闭文件

File类也包含用于从文件读取内容的3种方法:

  • ReadAllText():打开文件,读取该文件中的所有文本并放入字符串中,关闭文件
  • ReadAllLines():打开文件,读取该文件中的所有文本并放入字符串数组中,关闭文件
  • ReadAllBytes():打开文件,读取该文件中的所有文本并放入字节数组中,关闭文件