標籤:
管理檔案系統主要是對電腦中檔案和目錄的管理,例如,讀取檔案資訊、刪除檔案和讀取目錄資訊等。這些功能的實現主要是由System.IO命名空間下的類對檔案和目錄進行操作
System.IO命名空間為目錄和檔案的操作提供了必要的類、方法和屬性
一、Directory類和DirectoryInfo類
在System.IO命名空間中,提供了Directory類和DirectoryInfo類來進行目錄管理。使用這兩個類可以完成對目錄及其子目錄的建立、移動、瀏覽等操作,甚至還可以定義隱藏目錄和唯讀目錄
Directory類的所有方法都為靜態方法,因此無需建立對象即可調用,這些方法可以操縱和查詢任何目錄的資訊;而DirectoryInfo類需要有執行個體成員才可以調用其方法,從而有效地對一個目錄進行多種操作。DirectoryInfo類執行個體化後,還可以通過其屬性擷取目錄的建立時間和最後修改時間等狀態
1、DirectoryInfo類的常用屬性
DirectoryInfo類的屬性可以擷取或設定目前的目錄的相關屬性,下面建立一個樣本,使用Attributes等屬性設定並獲C:\Users\Eniac\Desktop\TestDirectory目錄的相關屬性資訊,代碼如下:
string dirPath = "C:\\Users\\Eniac\\Desktop\\TestDirectory"; //目錄的絕對路徑if (Directory.Exists(dirPath)) //如果目錄存在{ DirectoryInfo info = new DirectoryInfo(dirPath); //初始化目前的目錄執行個體 info.Attributes = FileAttributes.ReadOnly | FileAttributes.Hidden; //利用Attributes屬性設定目錄為唯讀和隱藏 /*利用DirectoryInfo執行個體的屬性獲得目前的目錄的資訊*/ label1.Text += "全部名稱 : " + info.FullName + "\n"; label1.Text += "目錄建立時間 : " + info.CreationTime.ToString() + "\n"; label1.Text += "最後一次訪問該目錄的時間: " + info.LastAccessTime.ToString() + "\n"; label1.Text += "最後一次修改目錄時間 : " + info.LastWriteTime.ToString() + "\n"; label1.Text += "DirectoryInfo執行個體名稱 : " + info.Name + "\n"; label1.Text += "父目錄 : " + info.Parent + "\n"; label1.Text += "路徑根部分 : " + info.Root.ToString() + "\n";}else{ label1.Text = "該目錄不存在,請檢驗路徑是否正確";}
執行結果如:
2、Directory類的常用方法
(1)Exists方法
Exists方法接收一個參數,該參數表示包含目前的目錄路徑的字串,Exists方法返回結果指示目錄是否存在,如果存在,返回true,否則返回false。如上例if語句的判別條件:
if (Directory.Exists(dirPath)) //如果目錄存在
(2)CreatDirectory方法
CreatDirectory方法接受一個建立目錄路徑的String型別參數,該方法會根據此路徑建立新目錄,並且該方法返回一個DirectoryInfo執行個體,如果建立的目錄已經存在,則返回代表指定目錄的類執行個體,不會建立目錄,也不會產生異常。通常用法如下:
if (!Directory.Exists(dirPath)) //如果目錄不存在就建立目錄 { Directory.CreateDirectory(dirPath);}
(3)Delete方法
Delete方法可以刪除指定的目錄,該方法為一個重載方法,可以接收一個參數或兩個參數。當方法接收一個參數時,該參數為指定目錄的路徑,這種情況下只能刪除指定的空目錄,如果目錄不空,系統會拋出異常;當該方法接收兩個參數時,第二個參數為bool值,如果為true,則可以刪除非空目錄。通常用法如下:
if(Directory.Exists(dirPath)) //如果目錄存在{ try { Directory.Delete(dirPath,true);//刪除目錄以及目錄中所有的子目錄和檔案 } catch(Exception ex) //當出現異常時,系統拋出異常 { MessageBox.Show(ex.Message.ToString()); }}
(4)Move方法
Move方法表示將指定目錄移動到新位置,並提供指定新目錄名。該方法能夠接收兩個參數,其中第一個參數表示要移動的目錄路徑,第二個參數表示目標路徑(加上指定的新目錄名),當要移動的目錄和目標路徑的父目錄相同時,Move就不再移動目錄而是重新命名目錄。Move方法不能把目錄在不同的邏輯磁碟機之間進行移動,格式如下:
string dirPath1 = "C:\Users\Eniac\Desktop\dir1";string dirPath2 = "C:\Program Files\dir2";Directory.Move(dirPath1,dirPath2); //把目錄dir1移動到C:\Program Files目錄下並重新命名為dir2
另外Directory類還有以下方法,就不一一詳細介紹了:
Directory.GetFiles(dirPath); //擷取指定目錄中所有檔案的檔案名稱(檔案清單,包含子目錄)Directory.GetDirectories(dirPath); //擷取指定目錄下所有子目錄名Directory.GetFileSystemEntries(dirPath); //擷取指定目錄中的所有子目錄名及檔案名稱
DirectoryInfo類中還有一些方法,DirectoryInfo類對象通過使用這些方法可以操作當前檔案,這些方法的使用跟Directory類的方法很類似,並且有很多功能也是相同的。具體使用時,如果使用者打算多次重用某個對象,可以考慮使用DirectoryInfo的執行個體方法,而不是Directory類相應的靜態方法,因為DirectoryInfo的執行個體方法並不總是需要進行安全檢查,預設情況下,該類將向所有使用者授予對新目錄的完全讀/寫存取權限
由於DirectoryInfo類中的方法和Directory類的方法有很多相似之處,只是調試的方式不同,在此就不再對該類中的方法進行講解
二、File類和FileInfo類
System.IO命名空間的File類和FileInfo類提供有關檔案系統操作的相關內容,例如建立、刪除、移動和開啟檔案等
File類的操作方式與Directory類相似,File類中的方法大多都為靜態方法;而FileInfo類和上文中講解的DirectoryInfo類相似,只有在執行個體化的情況下才可以使用其屬性和方法
1、FileInfo類的常用屬性
FileInfo類主要用於對執行個體對象的操作,跟DirectoryInfo類的操作方式比較相似,該類提供了很多屬性,通過FileInfo類的屬性可以獲得檔案的相關資訊。我們通過下面的程式簡單瞭解一下FileInfo類的屬性:
private void button1_Click(object sender, EventArgs e)//選擇檔案{ /*此處用到了一個OpenFileDialog控制項*/ if (openFileDialog1.ShowDialog() != DialogResult.OK)//開啟失敗則退出 { return; } textBox1.Text = openFileDialog1.FileName;//把選中檔案的絕對路徑填入文字框}private void button2_Click(object sender, EventArgs e)//擷取詳細資料{ string filePath = textBox1.Text; //檔案的絕對路徑 FileInfo info = new FileInfo(filePath);//初始化當前檔案執行個體 label1.Text += "········檔案名稱: " + info.Name + "\n"; label1.Text += "······檔案完整路徑: " + info.FullName + "\n"; label1.Text += "····所在目錄完整路徑: " + info.DirectoryName + "\n"; label1.Text += "·······副檔名: " + info.Extension + "\n"; label1.Text += "········檔案大小: " + info.Length / 1024 + "KB\n"; label1.Text += "······檔案建立時間: " + info.CreationTime.ToString() + "\n"; label1.Text += "最後一次訪問該檔案的時間: " + info.LastAccessTime.ToString() + "\n"; label1.Text += "·最後一次寫入該檔案時間: " + info.LastWriteTime.ToString() + "\n"; label1.Text += "·····檔案是否為唯讀: " + info.IsReadOnly + "\n";}
執行結果如:
2、File類的常用方法
下面列出了File類的常用方法:
File.Exists(filePath); //用於判定指定檔案是否存在File.Create(filePath); //在指定路徑中建立檔案File.Delete(filePath); //刪除指定檔案File.Move(filePath1,filePath2);//把filePath1檔案移動到指定的filePath2路徑File.Copy(filePath1,filePath2);//把filePath1檔案複製到指定的filePath2路徑File.AppendAllText(filePath,String);//將字串(第二個參數)追加到指定檔案中,若檔案不存在則此方法先建立檔案再追加File.ReadAllLines(filePath);//一次性讀取指定檔案的所有行,返回一個字串數組,數組元素是每一行的內容File.ReadAllText(filePath);//一次性讀取指定檔案的所有內容,返回一個包含全部常值內容的字串File.WriteAllLines(filePath,String[]);//一次將字串數組的每一個元素作為一行寫入指定檔案File.WriteAllText(filePath,String);//一次性將字串(第二個參數)寫入指定檔案
上述後四種方法適用於檔案讀寫的內容不是很多的情況下,在檔案讀寫的時候會細講
FileInfo類中還有一些方法,FileInfo類對象通過使用這些方法可以操作當前檔案,這些方法的使用跟File類的方法很類似,並且有很多功能也是相同的。具體使用時,如果使用者打算多次重用某個對象,可以考慮使用FileInfo的執行個體方法,而不是File類相應的靜態方法,因為FileInfo的執行個體方法並不總是需要進行安全檢查,預設情況下,該類將向所有使用者授予對新檔案的完全讀/寫存取權限
由於FileInfo類中的方法和File類的方法有很多相似之處,只是調試的方式不同,在此就不再對該類中的方法進行講解
C#檔案系統管理