程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#文件系統管理,

C#文件系統管理,

編輯:C#入門知識

C#文件系統管理,


  目錄

  • 前言
  • Directory類和DirectoryInfo類
  • File類和FileInfo類
  • Path類

 

前言

 

  管理文件系統主要是對計算機中文件和目錄的管理,例如,讀取文件信息、刪除文件和讀取目錄信息等。這些功能的實現主要是由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類的方法有很多相似之處,只是調試的方式不同,在此就不再對該類中的方法進行講解

    

 

Path類

 

  Path類對包含文件或目錄路徑信息的String實例執行操作,並且以跨平台的方式執行這些操作。在不用的平台上,表示路徑的字符串可能不相同,文件的擴展名格式也不相同,因為這些不同Path類的字段以及Path類的某些成員的行為與平台相關

  Path類的所有成員(方法和屬性)都是靜態的,因此無需具有路徑的實例即可被調用,這些成員使用戶可以快速方便地執行常見操作,例如確定文件擴展名是否是路徑的一部分,以及將兩個字符串合成一個路徑名

  下面列出了Path類常用的方法及說明:

Path.GetExtension(path);  //返回指定路徑字符串的擴展名
Path.GetFileNameWithoutExtension(path);//返回不具有擴展名的指定路徑字符串的文件名
Path.GetFileName(path);  //返回具有擴展名的指定路徑字符串的文件名
Path.GetFullPath(path);  //返回指定路徑字符串的絕對路徑
Path.ChangeExtension(path,extension);//更改路徑字符串的擴展名

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved