Skip to content

.NET Core 实战 [No.241~252] 目录与文件

🏷️ 《.NET Core 实战》

操作目录与文件主要使用如下几个类:

  • Directory:提供了一系列操作目录的静态方法。
  • File:提供了一系列操作文件的静态方法。
  • DirectoryInfo:提供了一系列操作目录的实例方法。
  • FileInfo:提供了一系列操作文件的实例方法。
  • DriveInfo:磁盘信息

如下示例代码基本上包含了常用的目录和文件操作,以供参考。

csharp
var dirName = "test_dir";
var fileName_SampleData = $"{dirName}/sample.data";
var fileName_TestData = $"{dirName}/test_data";
// 判断目录是否存在
if (Directory.Exists(dirName))
{
    // 判断文件是否存在
    if (File.Exists(fileName_SampleData))
    {
        // 删除文件
        File.Delete(fileName_SampleData);
    }

    // 创建 FileInfo 实例
    var fiTestData = new FileInfo(fileName_TestData);
    // 使用 FileInfo 判断文件是否存在
    if (fiTestData.Exists)
    {
        // 使用 FileInfo 删除文件
        fiTestData.Delete();
    }

    // 删除目录
    Directory.Delete(dirName);
}

// 创建目录
Directory.CreateDirectory(dirName);

// 创建并写入文件
using (var stream = File.Create(fileName_SampleData))
{
    byte[] buffer = { 2, 3, 5, 7, 11 };
    // 写入文件
    stream.Write(buffer, 0, buffer.Length);
    stream.Close();
}

// 修改文件的创建时间
File.SetCreationTime(fileName_SampleData, new DateTime(1990, 1, 18, 12, 0, 0));

// 使用 FileInfo 类创建文件
var file = new FileInfo(fileName_TestData);
using (var s = file.Create())
{
    // 写入文件
    s.Write(new byte[] { 90, 1, 18 });
}

// 覆写文件内容
File.WriteAllText(fileName_SampleData, "岂曰无衣?与子同袍。\r\n");

// 向文件追加文本
File.AppendAllText(fileName_SampleData, "山川异域,\r\n");
File.AppendAllText(fileName_SampleData, "风月同天。\r\n\r\n");

// 以行的形式写入文本
File.AppendAllLines(fileName_SampleData, new string[] {
    "绝对有佳人,幽居在空谷。",
    "自云良家子,零落依草木。",
    "",
});

// 读取文件中所有行
var lines = File.ReadAllLines(fileName_SampleData);
foreach (var line in lines)
{
    Console.WriteLine(line);
}

// 获取文件信息
DirectoryInfo dir = new DirectoryInfo(dirName);
var q = from f in dir.EnumerateFiles()
        orderby f.Length
        select (FileName: f.Name, FileSize: f.Length);

// 重命名目录
var oldName = "test_1";
var newName = "test_2";
if (Directory.Exists(newName))
{
    Directory.Delete(newName);
}
Directory.CreateDirectory(oldName);
Directory.Move(oldName, newName);

// 枚举磁盘驱动器
DriveInfo[] driveInfos = DriveInfo.GetDrives();
var qd = from d in driveInfos
         where d.IsReady
         select d;
foreach (var di in qd)
{
    Console.WriteLine($"驱动器名:{di.Name}");
    Console.WriteLine($"卷标:{di.VolumeLabel}");
    Console.WriteLine($"总容量:{di.TotalSize}");
    Console.WriteLine($"当前可用空间:{di.TotalFreeSpace}");
    Console.WriteLine($"驱动器类型:{di.DriveType}");
    Console.WriteLine($"文件格式:{di.DriveFormat}");
    Console.WriteLine($"根目录:{di.RootDirectory.Name}");
    Console.WriteLine();
}

输出结果如下:


参考:《.NET Core 实战:手把手教你掌握 380 个精彩案例》 -- 周家安 著