.NET學習筆記--I/O檔案處理(上)
.NET學習筆記--I/O檔案處理(上)
幾個重要的 NameSpace
System.IO
System.IO.Compression
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
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():重新讀取
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);
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("");
}
}
listBox1.Items.Add("");
}
}
Directory:是一個 Helper類別,有多個Static method!
Exists:目錄是否存在
CreateDirectory:建立目錄
Delete(string 檔名, bool 包含目錄中所有):若目錄中有唯讀檔會失敗
CreateDirectory:建立目錄
Delete(string 檔名, bool 包含目錄中所有):若目錄中有唯讀檔會失敗
Move:移動目錄
取得/設定時間等等
取得/設定時間等等
DirectoryInfo: 取得目錄的資訊
Parent:上一層的資訊
Root:根目錄的資訊
MoveTo:搬移目錄
Root:根目錄的資訊
MoveTo:搬移目錄
Create:建立目錄
GetDirectories、GetFiles、GetFileSystemInfos ..
GetDirectories、GetFiles、GetFileSystemInfos ..
例子,用DirectoryInfo判斷目錄是否存在,不存在就建立他:
DirectoryInfo driveinfo = new DirectoryInfo(@"c:\huwk\bert");
if ( !driveinfo.Exists)
driveinfo.Create();
File:是一個Helper類別,有多個Static method!
FileInfo:檔案資訊
DirectoryInfo driveinfo = new DirectoryInfo(@"c:\huwk\bert");
if ( !driveinfo.Exists)
driveinfo.Create();
File:是一個Helper類別,有多個Static method!
Copy:複制
Encrypt:加密(只有當前帳戶能解密)
Decrypt:解密
Replace:取代
等等
Encrypt:加密(只有當前帳戶能解密)
Decrypt:解密
Replace:取代
等等
FileInfo:檔案資訊
Length:檔案大小
IsReadOnly:是否唯讀
等等
IsReadOnly:是否唯讀
等等
Path:是一個Helper類別,有多個Static method!
Combine:組合路徑(第二個參數若包含絕對路徑,會直接回傳第二個)
GetTempPath:取得目前使用者的暫存路徑
GetRandomFileName:取得隨機檔名
GetTempFileName:取得一暫存檔名
ChangeExtension:變更副檔名
HasExtension:是否有副檔名
GetTempPath:取得目前使用者的暫存路徑
GetRandomFileName:取得隨機檔名
GetTempFileName:取得一暫存檔名
ChangeExtension:變更副檔名
HasExtension:是否有副檔名
FileSystemWatcher:檔案系統監視,可以在檔案目錄被異動(新增、刪除、修改、更名)時,及時做出通知
void fw_Changed(object sender, FileSystemEventArgs e)
{
MessageBox.Show(e.FullPath+":被改變");
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;
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 個意見:
張貼留言