C# basic knowledge learning - Directory, File, Path, DirectoryInfor, FileInfor, DriveInfo, StreamReader, StreamWriter (17)

Directory and File are two static classes that can obtain file and folder information. It is very useful when performing an operation on a file or folder. Path provides
various methods for path operations.
DirectoryInfor and FileInfor are two examples that can be used. There is some overhead during instantiation, but there is basically no overhead for a large number of operations on a file or folder after instantiation. FileSystemInfo is their common base class. DriveInfo is a class related to
drives .

escape character @

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

Directory and File

Check if the file exists

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

loop through files in folder

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

Get the address of the current compilation environment

 Console.WriteLine(Directory.GetCurrentDirectory());

Composite file path

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

copy of a single file

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

File creation and last modification time

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

DirectoryInfo与FileInfo

loop through folder contents

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}");

create folder

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

Create a file

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

Path

directory separator

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

environment variable separator

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

capacity separator

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

replacement character

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

Characters not allowed in paths

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

Characters not allowed in filenames

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

path stitching

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

DriveInfo

View drive information

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

Available space

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

drive format

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

drive name

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

drive label

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

Total drive free space available

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

File reads a file

Partial file reading – by character

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

Partial file read – by condition

 //读取文件所有行
            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);
            }

Partial file reading – by bytes

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

Create folder and write content

 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();

Guess you like

Origin blog.csdn.net/weixin_45496521/article/details/128072090