星期二, 10月 24, 2006

.NET學習筆記--I/O檔案處理(上)

.NET學習筆記--I/O檔案處理(上)



幾個重要的 NameSpace

System.IO

System.IO.Compression




主要的 Class

檔案系統相關(FileSystemInfo)

DriveInfo、DriveType

Directory、DirectoryInfo

File、FileInfo

FileSystemInfo、FileSystemWatcher

Path



串流相關

Stream、FileStream、MemoryStream、BufferedStream



讀寫相關

StringReader、StringWriter

TextReader、TextWriter

StreamReader、StreamWriter

BinaryReader、BinaryWriter



壓縮

DeflateStream、GZipStream




主要功能如下

FileSystemInfo:是 FileInfo與DirectoryInfo的基礎類別,提供檔案目錄共用的資訊

Attributes:唯讀、隱藏、保存等資訊

Extension:副檔名

LastWriteTime、LastAccessTime、CreationTime :相關時間

Refresh():重新讀取


DriverInfo:取得磁碟機的資訊

DriveType:列舉型態,磁碟機是何類型(網路、固定、CDROM..等等)

如下的例子取資系統中所有磁碟機的資訊(可用空間、所有空間、格式、磁碟名稱等資訊)

{
listBox1.Items.Clear();
//取得系統所有磁碟機
DriveInfo[] driveinfos = DriveInfo.GetDrives();
listBox1.Items.Add(string.Format("系統共有{0}部磁碟機", driveinfos.Length));
foreach (DriveInfo di in driveinfos)
{
try
{
listBox1.Items.Add(string.Format("{0} 磁碟資訊如下 ", di.Name));
listBox1.Items.Add(string.Format("型態為:{0} 格式為:{1} 磁碟名稱:{2}",di.DriveType, di.DriveFormat, di.VolumeLabel));
listBox1.Items.Add(string.Format("所有空間:{0},剩餘空間:{1}", di.TotalSize,
di.AvailableFreeSpace));
//AvailableFreeSpace與TotalFreeSpace 最大不同是前者考量了windows的配額!
listBox1.Items.Add(string.Format("根目錄共有{0}個目錄,{1}個檔案", di.RootDirectory.GetDirectories().Length, di.RootDirectory.GetFiles().Length));
}
catch (IOException ee)
{
listBox1.Items.Add(ee.Message);
}
listBox1.Items.Add("");
}
}

Directory:是一個 Helper類別,有多個Static method!
Exists:目錄是否存在
CreateDirectory:建立目錄
Delete(string 檔名, bool 包含目錄中所有):若目錄中有唯讀檔會失敗
Move:移動目錄
取得/設定時間等等

DirectoryInfo: 取得目錄的資訊
Parent:上一層的資訊
Root:根目錄的資訊
MoveTo:搬移目錄
Create:建立目錄
GetDirectories、GetFiles、GetFileSystemInfos ..

例子,用DirectoryInfo判斷目錄是否存在,不存在就建立他:
DirectoryInfo driveinfo = new DirectoryInfo(@"c:\huwk\bert");
if ( !driveinfo.Exists)
driveinfo.Create();

File:是一個Helper類別,有多個Static method!
Copy:複制
Encrypt:加密(只有當前帳戶能解密)
Decrypt:解密
Replace:取代
等等

FileInfo:檔案資訊
Length:檔案大小
IsReadOnly:是否唯讀
等等
Path:是一個Helper類別,有多個Static method!
Combine:組合路徑(第二個參數若包含絕對路徑,會直接回傳第二個)
GetTempPath:取得目前使用者的暫存路徑
GetRandomFileName:取得隨機檔名
GetTempFileName:取得一暫存檔名
ChangeExtension:變更副檔名
HasExtension:是否有副檔名
FileSystemWatcher:檔案系統監視,可以在檔案目錄被異動(新增、刪除、修改、更名)時,及時做出通知

void fw_Changed(object sender, FileSystemEventArgs e)
{
MessageBox.Show(e.FullPath+":被改變");
}

FileSystemWatcher fw = new FileSystemWatcher();
fw.Path = @"c:\"; //監看c槽
//包含子目錄
fw.IncludeSubdirectories = true;
//通知法則為檔案大小與最後寫入時間
fw.NotifyFilter = NotifyFilters.Size NotifyFilters.LastWrite;
//只監看文字檔
fw.Filter = "*.txt";
//掛上異動的事件
fw.Changed += new FileSystemEventHandler(fw_Changed);
//開始接收
fw.EnableRaisingEvents = true;

後記:

1.當裝置未就序時,會發生IOException,所以處理檔案系統最好加上處理

2.當對windows按右鍵點選新增檔案時,其實他是先建立一個"新增xx檔.xx",當你對他改名時,他又做了一次rename,若此時按取消,他會
做一次刪除的動作。

0 個意見: