C# 文件系统

检查驱动器信息

DriveInfo[] drives = DriveInfo.GetDrives();
foreach(var drive in drives)
{
    if (drive.IsReady)
    {
        Console.WriteLine(new String('*',30));
        Console.WriteLine($"Drive name:{drive.Name}");
        Console.WriteLine($"Format:{drive.DriveFormat}");
        Console.WriteLine($"Root directory:{drive.RootDirectory}");
        Console.WriteLine($"Free Space:{drive.TotalFreeSpace/1024d/1024d/1024d }GB");
        Console.WriteLine($"Available Space:{drive.AvailableFreeSpace / 1024 / 1024d / 1024d}GB");
        Console.WriteLine($"Total size:{drive.TotalSize / 1024d / 1024d/1024d}GB");
    }
}

Console.ReadLine();


文件监测


public class Program
{
    private static FileSystemWatcher s_watcher;
    public static void WatchFiles(string path, string filter)
    {
        s_watcher = new FileSystemWatcher(path, filter) { IncludeSubdirectories = true };
        s_watcher.Created += OnFileChanged;
        s_watcher.Changed += OnFileChanged;
        s_watcher.Deleted += OnFileChanged;
        s_watcher.Renamed += OnFileRenamed;
        s_watcher.EnableRaisingEvents = true;
        Console.WriteLine("Watching File changes ....");
    }

    private static void OnFileRenamed(object sender, RenamedEventArgs e)
    {
        Console.WriteLine($"file {e.OldName} to {e.Name}");
    }

    private static void OnFileChanged(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"file {e.Name} {e.ChangeType}");
    }

    public static void Main()
    {
        WatchFiles(@"C:\Users\PC\Desktop\新建文件夹 (2)","*.*");
        Console.ReadLine();
    }
}

在使用 FileSystemWatcher 监视文件系统时,EnableRaisingEvents 属性是一个非常重要的属性,它控制着文件系统更改事件是否被引发。

EnableRaisingEvents 属性是一个布尔类型的属性,用于指示 FileSystemWatcher 是否应该引发 Created、Changed、Deleted 和 Renamed 事件。如果将该属性设置为 true,则 FileSystemWatcher 将引发这些事件;如果将其设置为 false,则 FileSystemWatcher 将不会引发这些事件。

当创建一个新的 FileSystemWatcher 对象时,默认情况下,EnableRaisingEvents 属性为 false。这意味着,如果我们不显式地将其设置为 true,则 FileSystemWatcher 将不会引发任何事件。在实际使用中,我们通常需要将其设置为 true,以便监视文件系统更改并在相应的事件发生时执行必要的操作。

需要注意的是,启用 EnableRaisingEvents 属性会导致 FileSystemWatcher 对象在后台运行,并持续监视文件系统的更改。因此,如果我们不再需要监视文件系统更改,则应该将其设置为 false,以释放资源并停止监视。此外,在启用 EnableRaisingEvents 属性时,还需要注意保护代码不受多个事件同时触发的影响,这可能导致竞态条件和其他问题。

将EnableRaisingEvents改为false后,发现确实停止了文件系统的监听,对文件的各种操作,并不会触发相应的响应。

创建临时文件

在 C# 中,Path 类提供了许多用于处理路径的实用方法。其中,GetTempPath、GetTempFileName 和 GetRandomFileName 是三个与临时文件和目录有关的方法。

Path.GetTempPath
Path.GetTempPath 方法返回当前系统上的默认临时文件夹的路径。这个路径通常是系统环境变量 %TEMP% 或 %TMP% 所指向的文件夹。在 Windows 操作系统中,临时文件夹通常是 C:\Users\AppData\Local\Temp。
Path.GetTempFileName 方法在默认临时文件夹中创建一个唯一的临时文件,并返回其完全限定路径。该方法将随机生成一个文件名,并在文件名的末尾添加 .tmp 扩展名。如果创建的文件已经存在,该方法将覆盖它并创建一个新的唯一的文件。
Path.GetRandomFileName 方法返回一个随机的文件名,不包括文件路径。文件名是由两个随机生成的 GUID 组成,中间使用一个连字符连接。该方法生成的文件名是唯一的,适用于在文件名中不需要路径的情况。

string tempPath = Path.GetTempPath();
Console.WriteLine(tempPath);
string tempFileName = Path.GetTempFileName();
Console.WriteLine(tempFileName);
string randomFileName = Path.GetRandomFileName();
Console.WriteLine(randomFileName);
Console.ReadLine();


Path.GetRandomFileName() 方法返回的随机文件名只包括文件名部分,不包括路径,因此需要我们自己指定一个路径来存储该文件。通常情况下,我们会将随机文件存储在默认的临时文件夹中,即可以通过 Path.GetTempPath() 方法获取的路径。以下示例展示了如何使用 Path.GetRandomFileName() 和 Path.Combine() 方法创建一个随机文件并将其存储在临时文件夹中

posted @ 2023-04-01 16:38  JohnYang819  阅读(42)  评论(0编辑  收藏  举报