C#中常用的經典檔案操作方法

iDotNetSpace發表於2009-12-22
C#追加檔案 
StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt"); 
sw.WriteLine("追逐理想"); 
sw.WriteLine("kzlll"); 
sw.WriteLine(".NET筆記"); 
sw.Flush(); 
sw.Close();

C#拷貝檔案 
string OrignFile,NewFile; 
rignFile = Server.MapPath(".")+"\\myText.txt"; 
NewFile = Server.MapPath(".")+"\\myTextCopy.txt"; 
File.Copy(OrignFile,NewFile,true);

C#刪除檔案 
string delFile = Server.MapPath(".")+"\\myTextCopy.txt"; 
File.Delete(delFile);

C#移動檔案 
string OrignFile,NewFile; 
rignFile = Server.MapPath(".")+"\\myText.txt"; 
NewFile = Server.MapPath(".")+"\\myTextCopy.txt"; 
File.Move(OrignFile,NewFile);

C#建立目錄 
// 建立目錄c:\sixAge 
DirectoryInfo d=Directory.CreateDirectory("c:\\sixAge"); 
// d1指向c:\sixAge\sixAge1 
DirectoryInfo d1=d.CreateSubdirectory("sixAge1"); 
// d2指向c:\sixAge\sixAge1\sixAge1_1 
DirectoryInfo d2=d1.CreateSubdirectory("sixAge1_1"); 
// 將當前目錄設為c:\sixAge 
Directory.SetCurrentDirectory("c:\\sixAge"); 
// 建立目錄c:\sixAge\sixAge2 
Directory.CreateDirectory("sixAge2"); 
// 建立目錄c:\sixAge\sixAge2\sixAge2_1 
Directory.CreateDirectory("sixAge2\\sixAge2_1");

遞迴刪除資料夾及檔案 
public void DeleteFolder(string dir) 
{ 
    if (Directory.Exists(dir)) //如果存在這個資料夾刪除之 
    { 
        foreach(string d in Directory.GetFileSystemEntries(dir)) 
        { 
            if(File.Exists(d)) 
                File.Delete(d); //直接刪除其中的檔案 
            else 
                DeleteFolder(d); //遞迴刪除子資料夾 
        } 
        Directory.Delete(dir); //刪除已空資料夾 
        Response.Write(dir+" 資料夾刪除成功"); 
    } 
    else 
        Response.Write(dir+" 該資料夾不存在"); //如果資料夾不存在則提示 
}

protected void Page_Load (Object sender ,EventArgs e) 
{ 
    string Dir="D:\\gbook\\11"; 
    DeleteFolder(Dir); //呼叫函式刪除資料夾 
}

// ======================================================
// 實現一個靜態方法將指定資料夾下面的所有內容copy到目標資料夾下面
// 如果目標資料夾為只讀屬性就會報錯。
// April 18April2005 In STU
// ======================================================
public static void CopyDir(string srcPath,string aimPath)
{
   try
   {
    // 檢查目標目錄是否以目錄分割字元結束如果不是則新增之
    if(aimPath[aimPath.Length-1] != Path.DirectorySeparatorChar) 
     aimPath += Path.DirectorySeparatorChar;
    // 判斷目標目錄是否存在如果不存在則新建之
    if(!Directory.Exists(aimPath)) Directory.CreateDirectory(aimPath);
    // 得到源目錄的檔案列表,該裡面是包含檔案以及目錄路徑的一個陣列
    // 如果你指向copy目標檔案下面的檔案而不包含目錄請使用下面的方法
    // string[] fileList = Directory.GetFiles(srcPath);
    string[] fileList = Directory.GetFileSystemEntries(srcPath);
    // 遍歷所有的檔案和目錄
    foreach(string file in fileList)
    {
     // 先當作目錄處理如果存在這個目錄就遞迴Copy該目錄下面的檔案
     if(Directory.Exists(file))
      CopyDir(file,aimPath+Path.GetFileName(file));
      // 否則直接Copy檔案
     else
      File.Copy(file,aimPath+Path.GetFileName(file),true);
    }
   }
   catch (Exception e)
   {
    MessageBox.Show (e.ToString());
   }
}

// ======================================================
// 實現一個靜態方法將指定資料夾下面的所有內容Detele
// 測試的時候要小心操作,刪除之後無法恢復。
// April 18April2005 In STU
// ======================================================
public static void DeleteDir(string aimPath)
{
   try
   {
    // 檢查目標目錄是否以目錄分割字元結束如果不是則新增之
    if(aimPath[aimPath.Length-1] != Path.DirectorySeparatorChar) 
     aimPath += Path.DirectorySeparatorChar;
    // 得到源目錄的檔案列表,該裡面是包含檔案以及目錄路徑的一個陣列
    // 如果你指向Delete目標檔案下面的檔案而不包含目錄請使用下面的方法
    // string[] fileList = Directory.GetFiles(aimPath);
    string[] fileList = Directory.GetFileSystemEntries(aimPath);
    // 遍歷所有的檔案和目錄
    foreach(string file in fileList)
    {
     // 先當作目錄處理如果存在這個目錄就遞迴Delete該目錄下面的檔案
     if(Directory.Exists(file))
     {
      DeleteDir(aimPath+Path.GetFileName(file));
     }
      // 否則直接Delete檔案
     else
     {
      File.Delete (aimPath+Path.GetFileName(file));
     }
    }
    //刪除資料夾
    System.IO .Directory .Delete (aimPath,true);
   }
   catch (Exception e)
   {
    MessageBox.Show (e.ToString());
   }
}

需要引用名稱空間:
using System.IO;

public static void CopyFolder(string strFromPath,string strToPath)
{
   //如果原始檔夾不存在,則建立
   if (!Directory.Exists(strFromPath))
   {    
    Directory.CreateDirectory(strFromPath);
   }  

   //取得要拷貝的資料夾名
   string strFolderName = strFromPath.Substring(strFromPath.LastIndexOf("\\") + 1,strFromPath.Length - strFromPath.LastIndexOf("\\") - 1);  

   //如果目標資料夾中沒有原始檔夾則在目標資料夾中建立原始檔夾
   if (!Directory.Exists(strToPath + "\\" + strFolderName))
   {    
    Directory.CreateDirectory(strToPath + "\\" + strFolderName);
   }
   //建立陣列儲存原始檔夾下的檔名
   string[] strFiles = Directory.GetFiles(strFromPath);

   //迴圈拷貝檔案
   for(int i = 0;i < strFiles.Length;i++)
   {
    //取得拷貝的檔名,只取檔名,地址截掉。
    string strFileName = strFiles[i].Substring(strFiles[i].LastIndexOf("\\") + 1,strFiles[i].Length - strFiles[i].LastIndexOf("\\") - 1);
    //開始拷貝檔案,true表示覆蓋同名檔案
    File.Copy(strFiles[i],strToPath + "\\" + strFolderName + "\\" + strFileName,true);
   }

   //建立DirectoryInfo例項
   DirectoryInfo dirInfo = new DirectoryInfo(strFromPath);
   //取得原始檔夾下的所有子資料夾名稱
   DirectoryInfo[] ZiPath = dirInfo.GetDirectories();
   for (int j = 0;j < ZiPath.Length;j++)
   {
    //獲取所有子資料夾名
    string strZiPath = strFromPath + "\\" + ZiPath[j].ToString();   
    //把得到的子資料夾當成新的原始檔夾,從頭開始新一輪的拷貝
    CopyFolder(strZiPath,strToPath + "\\" + strFolderName);
   }
}

CreateDirectory方法方法的使用方法

using   System;   
using   System.IO;   
    
class   Test     
{   
          public   static   void   Main()     
          {   
                  //   Specify   the   directory   you   want   to   manipulate.   
                  string   path   =   @"c:\MyDir";   
    
                  try     
                  {   
                          //   Determine   whether   the   directory   exists.   
                          if   (Directory.Exists(path))     
                          {   
                                  Console.WriteLine("That   path   exists   already.");   
                                  return;   
                          }   
    
                          //   Try   to   create   the   directory.   
                          DirectoryInfo   di   =   Directory.CreateDirectory(path);   
                          Console.WriteLine("The   directory   was   created   successfully   at   {0}.",   Directory.GetCreationTime(path));   
    
                          //   Delete   the   directory.   
                          di.Delete();   
                          Console.WriteLine("The   directory   was   deleted   successfully.");   
                  }     
                  catch   (Exception   e)     
                  {   
                          Console.WriteLine("The   process   failed:   {0}",   e.ToString());   
                  }     
                  finally   {}   
          }   
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-623291/,如需轉載,請註明出處,否則將追究法律責任。

相關文章