C#基础知识学习——Directory、File、Path、 DirectoryInfor、FileInfor、DriveInfo、StreamReader、StreamWriter(十七)

DirectoryFile是两个静态类,可以获取文件和文件夹信息,在对某个文件或文件夹执行一次操作的时候很有用
Path为路径操作提供了各种方法
DirectoryInforFileInfor类是两个可以实例化的类,在实例化的时候有一些开销,但实例化完成后对某个文件或文件夹进行大量操作基本没有开销了,FileSystemInfo是他们共同的基类
DriveInfo是一个与驱动器有关的类

转义字符 @

///转义字符 @会将地址转义为适应本系统所需地址格式
            const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";

Directory与File

检查文件是否存在

 const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";
 Console.WriteLine($"{
      
       Directory.Exists(HOSTFILODERPATH)}");

遍历文件夹中的文件

 const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";
 new List<string>(Directory.EnumerateFiles(HOSTFILODERPATH)).ForEach((f) => Console.WriteLine(f));

获取当前编译环境地址

 Console.WriteLine(Directory.GetCurrentDirectory());

组合文件路径

 string NewPath = Path.Combine(Directory.GetCurrentDirectory(), "Hosts");
            Console.WriteLine(NewPath);

单个文件的copy

  File.Copy(Path.Combine(HOSTFILODERPATH, "hosts"), NewPath, true);           

文件创建与最后一次修改时间

 Console.WriteLine($"文件创建时间:{
      
      File.GetCreationTime(NewPath)}");
Console.WriteLine($"文件创建最后修改时间:{
      
      File.GetLastWriteTime(NewPath)}");

DirectoryInfo与FileInfo

遍历文件夹内容

const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc";
            Console.WriteLine("用DirectoryInfo遍历文件夹内容");
            DirectoryInfo directoryInfo = new DirectoryInfo(HOSTFILODERPATH);
            new List<FileSystemInfo>(directoryInfo.GetFileSystemInfos()).ForEach((f) => Console.WriteLine($"文件夹名称:{
      
      f}"));
            FileInfo fileInfo = new FileInfo(@"C:\Windows\System32\drivers\etc\hosts");
            Console.WriteLine($"hosts全名:{
      
      fileInfo.FullName},hosts扩展名:{
      
      fileInfo.Extension}");

创建文件夹

  //创建文件夹(若上级文件夹不存在,也会创建)
            DirectoryInfo directoryInfo1 = new DirectoryInfo(@"D:\files\Test");
            directoryInfo1.Create();

创建文件

 string newFilePath = @"D:\files\test.ini";
            var newfile = new FileInfo(newFilePath);
            newfile.Create();

Path

目录分隔符

 Console.WriteLine($"目录分隔符:{
      
      Path.DirectorySeparatorChar}");

环境变量分隔符

 Console.WriteLine($"环境变量分隔符:{
      
      Path.PathSeparator}");

容量分隔符

  Console.WriteLine($"容量分隔符:{
      
      Path.VolumeSeparatorChar}");

替换字符

Console.WriteLine($"替换字符:{
      
      Path.AltDirectorySeparatorChar}");

不允许在路径中使用的字符

   new List<char>(Path.GetInvalidPathChars()).ForEach((f) => Console.WriteLine($"不允许在路径中使用的字符:{
      
      f}")); 

不允许在文件名中使用的字符

new List<char>(Path.GetInvalidFileNameChars()).ForEach((f) => Console.WriteLine($"不允许在文件名中使用的字符:{
      
      f.ToString()}"));

路径拼接

  Console.WriteLine($@"C:\Window和System连接结果:{
      
      Path.Combine(@"C:\Window", "System")}");

DriveInfo

查看驱动器信息

DriveInfo driveInfo = new DriveInfo("C");
            Console.WriteLine("查看驱动器信息\n");

可用空间

Console.WriteLine($"可用空间,{
      
      driveInfo.AvailableFreeSpace / Math.Pow(1024, 3)}");

驱动器格式

Console.WriteLine($"驱动器格式:{
      
      driveInfo.DriveFormat}");

驱动器名称

  Console.WriteLine($"驱动器名称:{
      
      driveInfo.DriveType}");

驱动器卷标

 Console.WriteLine($"驱动器卷标:{
      
      driveInfo.VolumeLabel}");

驱动器总可用空闲空间

  Console.WriteLine($"驱动器总可用空闲空间:{
      
      driveInfo.TotalFreeSpace / Math.Pow(1024, 3)}");

File读取文件

部分文件读取–按字符

const string HOSTFILODERPATH = @"C:\Windows\System32\drivers\etc\hosts";
            Console.WriteLine("显示hosts文件的部分内容");
            Console.WriteLine(File.ReadAllText(HOSTFILODERPATH).Substring(0, 10));

部分文件读取–按条件

 //读取文件所有行
            string[] lines = File.ReadAllLines(HOSTFILODERPATH);
            //使用linq语句进行数据筛选
            var comment = from line in lines
                          where line.StartsWith("#")
                          select line;
            foreach (var item in comment.Take(10))
            {
    
    
                Console.WriteLine(item);
            }

部分文件读取–按字节

 Console.WriteLine("读取hosts文件的前20个字节");
            byte[] bytes = File.ReadAllBytes(HOSTFILODERPATH);
            for (int i = 0; i < Math.Min(20, bytes.Length); i++)
            {
    
    
                Console.WriteLine(bytes[i]);
            }
          

创建文件夹并写入内容

 const string TestFile = "test.txt";
  string msg = "测试字符串:564651";
  File.WriteAllText(TestFile, msg);

FileStream

//不同方式打开文件流--FileMode.Append文件内容追加--FileMode.Create文件内容创建
            FileStream fileStream = new FileStream("test.txt", FileMode.Create, FileAccess.Write);
            //FileStream fileStream1 = new FileInfo("test.txt").Open(FileMode.OpenOrCreate, FileAccess.ReadWrite);
            //写文件(覆盖)
            fileStream.WriteByte(50);
            fileStream.Write(new byte[] {
    
    100,25,22,88},0,4);
            fileStream.Close();

            追加内容,而不是覆盖
            //FileStream fileStream1 = new FileInfo("test.txt").Open(FileMode.Append, FileAccess.Write);
            //fileStream.Write(new byte[] { 10, 20, 30, 40 }, 0, 4);
            //fileStream.Close();
            //读文件
            fileStream = new FileInfo("test.txt").OpenRead();
            byte[] buffer = new byte[fileStream.Length];
            fileStream.Read(buffer,0, buffer.Length);
            new List<byte>(buffer).ForEach((e) => Console.Write(e + "  ")) ;
            fileStream.Close(); 

StreamReader与StreamWriter

Console.WriteLine("字符流读写和测试");
            // new StreamWriter("test.txt")--覆盖    new StreamWriter("test.txt",true)--追加
            StreamWriter streamWriter = new StreamWriter("test.txt",true);
            streamWriter.WriteLine("this is a file");
            streamWriter.WriteLine(DateTime.Now.ToString());
            streamWriter.Close();
            StreamReader streamReader = new StreamReader("test.txt");
            new List<string>(streamReader.ReadToEnd().Split('\n')).ForEach((e)=>Console.WriteLine(e));
            streamReader.Close();

猜你喜欢

转载自blog.csdn.net/weixin_45496521/article/details/128072090
今日推荐