C# 文件系统
檢查驅(qū)動器信息
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();
文件監(jiān)測
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 監(jiān)視文件系統(tǒng)時(shí),EnableRaisingEvents 屬性是一個(gè)非常重要的屬性,它控制著文件系統(tǒng)更改事件是否被引發(fā)。
EnableRaisingEvents 屬性是一個(gè)布爾類型的屬性,用于指示 FileSystemWatcher 是否應(yīng)該引發(fā) Created、Changed、Deleted 和 Renamed 事件。如果將該屬性設(shè)置為 true,則 FileSystemWatcher 將引發(fā)這些事件;如果將其設(shè)置為 false,則 FileSystemWatcher 將不會引發(fā)這些事件。
當(dāng)創(chuàng)建一個(gè)新的 FileSystemWatcher 對象時(shí),默認(rèn)情況下,EnableRaisingEvents 屬性為 false。這意味著,如果我們不顯式地將其設(shè)置為 true,則 FileSystemWatcher 將不會引發(fā)任何事件。在實(shí)際使用中,我們通常需要將其設(shè)置為 true,以便監(jiān)視文件系統(tǒng)更改并在相應(yīng)的事件發(fā)生時(shí)執(zhí)行必要的操作。
需要注意的是,啟用 EnableRaisingEvents 屬性會導(dǎo)致 FileSystemWatcher 對象在后臺運(yùn)行,并持續(xù)監(jiān)視文件系統(tǒng)的更改。因此,如果我們不再需要監(jiān)視文件系統(tǒng)更改,則應(yīng)該將其設(shè)置為 false,以釋放資源并停止監(jiān)視。此外,在啟用 EnableRaisingEvents 屬性時(shí),還需要注意保護(hù)代碼不受多個(gè)事件同時(shí)觸發(fā)的影響,這可能導(dǎo)致競態(tài)條件和其他問題。
將EnableRaisingEvents改為false后,發(fā)現(xiàn)確實(shí)停止了文件系統(tǒng)的監(jiān)聽,對文件的各種操作,并不會觸發(fā)相應(yīng)的響應(yīng)。
創(chuàng)建臨時(shí)文件
在 C# 中,Path 類提供了許多用于處理路徑的實(shí)用方法。其中,GetTempPath、GetTempFileName 和 GetRandomFileName 是三個(gè)與臨時(shí)文件和目錄有關(guān)的方法。
Path.GetTempPath
Path.GetTempPath 方法返回當(dāng)前系統(tǒng)上的默認(rèn)臨時(shí)文件夾的路徑。這個(gè)路徑通常是系統(tǒng)環(huán)境變量 %TEMP% 或 %TMP% 所指向的文件夾。在 Windows 操作系統(tǒng)中,臨時(shí)文件夾通常是 C:\Users\AppData\Local\Temp。
Path.GetTempFileName 方法在默認(rèn)臨時(shí)文件夾中創(chuàng)建一個(gè)唯一的臨時(shí)文件,并返回其完全限定路徑。該方法將隨機(jī)生成一個(gè)文件名,并在文件名的末尾添加 .tmp 擴(kuò)展名。如果創(chuàng)建的文件已經(jīng)存在,該方法將覆蓋它并創(chuàng)建一個(gè)新的唯一的文件。
Path.GetRandomFileName 方法返回一個(gè)隨機(jī)的文件名,不包括文件路徑。文件名是由兩個(gè)隨機(jī)生成的 GUID 組成,中間使用一個(gè)連字符連接。該方法生成的文件名是唯一的,適用于在文件名中不需要路徑的情況。
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() 方法返回的隨機(jī)文件名只包括文件名部分,不包括路徑,因此需要我們自己指定一個(gè)路徑來存儲該文件。通常情況下,我們會將隨機(jī)文件存儲在默認(rèn)的臨時(shí)文件夾中,即可以通過 Path.GetTempPath() 方法獲取的路徑。以下示例展示了如何使用 Path.GetRandomFileName() 和 Path.Combine() 方法創(chuàng)建一個(gè)隨機(jī)文件并將其存儲在臨時(shí)文件夾中
總結(jié)
- 上一篇: Web前端入门第 57 问:JavaSc
- 下一篇: C# AggreateException