C#檔案操作

來源:互聯網
上載者:User
向檔案中追加文本    File.AppendText FileInfo.AppendText  重新命名或移動檔案    File.Move FileInfo.MoveTo  刪除檔案    File.Delete FileInfo.Delete  複製檔案    File.Copy FileInfo.CopyTo  擷取檔案大小  FileInfo.Length  擷取檔案屬性  File.GetAttributes  設定檔案屬性  File.SetAttributes  確定檔案是否存在    File.Exists   檢索副檔名 Path.GetExtension  檢索檔案的完全限定路徑 Path.GetFullPath  檢索路徑中的檔案名稱和副檔名   Path.GetFileName  變更檔副檔名 Path.ChangeExtension
目錄操作
string[] drives = Directory.GetLogicalDrives(); //本地磁碟機的名,如:C:\等  string path = Directory.GetCurrentDirectory();  //擷取應用程式的當前工作目錄  Path.GetFileName(@"c:\dir\file.txt");  //擷取子目錄的名字,result的結果是file.txt  Directory.GetFiles(路徑及檔案名稱)                //擷取指定目錄中的檔案名稱(檔案清單)  DirectoryInfo di = new DirectoryInfo(@"f:\MyDir");     //建構函式建立目錄  DirectoryInfo di=Directory.CreateDirectory(@"f:\bbs"); //建立對象並建立目錄  if (di.Exists == false)                                //檢查是否存在此目錄  di.Create();                                           //建立目錄  DirectoryInfo dis = di.CreateSubdirectory("SubDir");   //以相對路徑建立子目錄  dis.Delete(true);                                      //刪除剛建立的子目錄  di.Delete(true);                                       //刪除建立目錄 
Directory.Delete(@"f:\bbs2", true); //刪除目錄及其子目錄和內容(如為假不能刪除有內容的目錄包括子目錄)  Directory.GetDirectories 方法 //擷取指定目錄中子目錄的名稱  string[] dirs = Directory.GetDirectories(@"f:\", "b*");   Console.WriteLine("此目錄中以b開頭的子目錄共{0}個!", dirs.Length);  foreach (string dir in dirs) { Console.WriteLine(dir); }  Directory.GetFileSystemEntries //擷取指定目錄中的目錄及檔案名稱  Directory.GetLogicalDrives //檢索此電腦上格式為“<磁碟機代號>:\”的邏輯磁碟機的名稱,文法同上 Directory.GetParent //用於檢索父目錄的路徑。  DirectoryInfo a = Directory.GetParent(path);  Console.WriteLine(a.FullName);Directory.Move //移動目錄及其在內的所有檔案  Directory.Move(@"f:\bbs\1", @"f:\bbs\2"); //將檔案夾1內的檔案剪到檔案夾2內 檔案夾2是剛建立的   Stream // 對位元組的讀寫操作(包含對非同步作業的支援) Reading Writing Seeking  BinaryReader和BinaryWriter // 從字串或未經處理資料到各種流之間的讀寫操作  FileStream類通過Seek()方法進行對檔案的隨機訪問,預設為同步  TextReader和TextWriter //用於文本的輸入和輸出  StringReader和StringWriter //在字串中讀寫字元  StreamReader和StreamWriter //在流中讀寫字元  BufferedStream //為諸如網路流的其它流添加緩衝的一種流類型.  MemoryStream //無緩衝的流  NetworkStream //網路上的流
編碼轉換
Encoding e1 = Encoding.Default;               //取得本頁預設代碼   Byte[] bytes = e1.GetBytes("續寫經典"); //轉為二進位  string str = Encoding.GetEncoding("UTF-8").GetString(bytes); //轉回UTF-8編碼 
文字檔操作:建立/讀取/拷貝/刪除

using System;  using System.IO;  class Test   {     string path = @"f:\t.txt";     public static void Main()      {               //建立並寫入(將覆蓋已有檔案)        if (!File.Exists(path))        {                     using (StreamWriter sw = File.CreateText(path))           {              sw.WriteLine("Hello");           }         }        //讀取檔案        using (StreamReader sr = File.OpenText(path))         {          string s = "";          while ((s = sr.ReadLine()) != null)           {             Console.WriteLine(s);          }       }       //刪除/拷貝       try        {          File.Delete(path);          File.Copy(path, @"f:\tt.txt");       }        catch (Exception e)        {          Console.WriteLine("The process failed: {0}", e.ToString());       }     }  } 
流檔案操作
private const string name = "Test.data";  public static void Main(String[] args)   {      //開啟檔案()  ,或通過File建立立如:fs = File.Create(path, 1024)      FileStream fs = new FileStream(name, FileMode.CreateNew);      //轉換為位元組 寫入資料(可寫入中文)      Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");      //位元組數組,位元組位移量,最多寫入的位元組數      fs.Write(info, 0, info.Length);      w.Close();      fs.Close();      //開啟檔案      fs = new FileStream(name, FileMode.Open, FileAccess.Read);      //讀取      BinaryReader r = new BinaryReader(fs);      for (int i = 0; i < 11; i++)       {          Console.WriteLine(r.ReadInt32());      }      w.Close();      fs.Close();  }
追加檔案
StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt");   sw.WriteLine("Android");   sw.WriteLine("Java");   sw.WriteLine(".NET");   sw.Flush();   sw.Close(); 

//拷貝檔案  string OrignFile,NewFile;   OrignFile = Server.MapPath(".")+"\\myText.txt";   NewFile = Server.MapPath(".")+"\\myTextCopy.txt";   File.Copy(OrignFile,NewFile,true);      //刪除檔案  string delFile = Server.MapPath(".")+"\\myTextCopy.txt";   File.Delete(delFile);      //移動檔案  string OrignFile,NewFile;   OrignFile = Server.MapPath(".")+"\\myText.txt";   NewFile = Server.MapPath(".")+"\\myTextCopy.txt";   File.Move(OrignFile,NewFile);      // 建立目錄  // 建立目錄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檔案夾內容

實現一個靜態方法將指定檔案夾下面的所有內容copy到目標檔案夾下面,如果目標檔案夾為唯讀屬性就會報錯。

//方法1public 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());    }  }  //方法2public 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);    }  }
刪除檔案夾內容  
實現一個靜態方法將指定檔案夾下面的所有內容Detele,測試的時候要小心操作,刪除之後無法恢複。
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());    }  }
讀取文字檔
private void ReadFromTxtFile()  {     if(filePath.PostedFile.FileName != "")     {       txtFilePath =filePath.PostedFile.FileName;       fileExtName = txtFilePath.Substring(txtFilePath.LastIndexOf(".")+1,3);         if(fileExtName !="txt" && fileExtName != "TXT")       {       Response.Write("請選擇文字檔");       }       else       {       StreamReader fileStream = new StreamReader(txtFilePath,Encoding.Default);       txtContent.Text = fileStream.ReadToEnd();       fileStream.Close();      }     }  } 
擷取檔案清單
private void GetFileList()  {    string strCurDir,FileName,FileExt;    /**////檔案大小    long FileSize;    /**////最後修改時間;    DateTime FileModify;    /**////初始化    if(!IsPostBack)    {      /**////初始化時,預設為當前頁面所在的目錄      strCurDir = Server.MapPath(".");      lblCurDir.Text = strCurDir;      txtCurDir.Text = strCurDir;    }    else    {      strCurDir = txtCurDir.Text;      txtCurDir.Text = strCurDir;      lblCurDir.Text = strCurDir;    }    FileInfo fi;    DirectoryInfo dir;    TableCell td;    TableRow tr;    tr = new TableRow();    /**////動態添加儲存格內容    td = new TableCell();    td.Controls.Add(new LiteralControl("檔案名稱"));    tr.Cells.Add(td);    td = new TableCell();    td.Controls.Add(new LiteralControl("檔案類型"));    tr.Cells.Add(td);    td = new TableCell();    td.Controls.Add(new LiteralControl("檔案大小"));    tr.Cells.Add(td);    td = new TableCell();    td.Controls.Add(new LiteralControl("最後修改時間"));    tr.Cells.Add(td);    tableDirInfo.Rows.Add(tr);    /**////針對目前的目錄建立目錄引用對象    DirectoryInfo dirInfo = new DirectoryInfo(txtCurDir.Text);    /**////迴圈判斷目前的目錄下的檔案和目錄    foreach(FileSystemInfo fsi in dirInfo.GetFileSystemInfos())    {      FileName = "";      FileExt = "";      FileSize = 0;      /**////如果是檔案      if(fsi is FileInfo)      {        fi = (FileInfo)fsi;        /**////取得檔案名稱        FileName = fi.Name;        /**////取得檔案的副檔名        FileExt = fi.Extension;        /**////取得檔案的大小        FileSize = fi.Length;        /**////取得檔案的最後修改時間        FileModify = fi.LastWriteTime;      }        /**////否則是目錄      else      {        dir = (DirectoryInfo)fsi;        /**////取得目錄名        FileName = dir.Name;        /**////取得目錄的最後修改時間        FileModify = dir.LastWriteTime;        /**////設定檔案的副檔名為"檔案夾"        FileExt = "檔案夾";      }      /**////動態添加表格內容      tr = new TableRow();      td = new TableCell();      td.Controls.Add(new LiteralControl(FileName));      tr.Cells.Add(td);      td = new TableCell();      td.Controls.Add(new LiteralControl(FileExt));      tr.Cells.Add(td);      td = new TableCell();      td.Controls.Add(new LiteralControl(FileSize.ToString()+"位元組"));      tr.Cells.Add(td);      td = new TableCell();      td.Controls.Add(new LiteralControl(FileModify.ToString("yyyy-mm-dd hh:mm:ss")));      tr.Cells.Add(td);      tableDirInfo.Rows.Add(tr);    }  }
讀取記錄檔
private void ReadLogFile()  {     //從指定的目錄以開啟或者建立的形式讀取記錄檔    FileStream fs = new FileStream(Server.MapPath("upedFile")+"\\logfile.txt", FileMode.OpenOrCreate, FileAccess.Read);    //定義輸出字串    StringBuilder output = new StringBuilder();    //初始化該字串的長度為0    output.Length = 0;    //為上面建立的檔案流建立讀取資料流    StreamReader read = new StreamReader(fs);    //設定當前流的起始位置為檔案流的起始點    read.BaseStream.Seek(0, SeekOrigin.Begin);    //讀取檔案    while (read.Peek() > -1)     {      //取檔案的一行內容並換行      output.Append(read.ReadLine() + "\n");    }    //關閉釋放讀資料流    read.Close();    //返回讀到的記錄檔內容    return output.ToString();  }
寫入記錄檔

private void WriteLogFile(string input)  {     //指定記錄檔的目錄    string fname = Server.MapPath("upedFile") + "\\logfile.txt";    //定義檔案資訊對象    FileInfo finfo = new FileInfo(fname);    //判斷檔案是否存在以及是否大於2K    if ( finfo.Exists && finfo.Length > 2048 )    {      //刪除該檔案      finfo.Delete();    }    //建立唯寫檔案流    using(FileStream fs = finfo.OpenWrite())    {      //根據上面建立的檔案流建立寫資料流      StreamWriter w = new StreamWriter(fs);      //設定寫資料流的起始位置為檔案流的末尾      w.BaseStream.Seek(0, SeekOrigin.End);      w.Write("\nLog Entry : ");      //寫入當前系統時間並換行      w.Write("{0} {1} \r\n",DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());      //寫入日誌內容並換行      w.Write(input + "\n");      //寫入------------------------------------“並換行      w.Write("------------------------------------\n");      //清空緩衝區內容,並把緩衝區內容寫入基礎流      w.Flush();      //關閉寫資料流      w.Close();    }  }
建立HTML檔案
private void CreateHtmlFile()  {     //定義和html標記數目一致的數組    string[] newContent = new string[5];    StringBuilder strhtml = new StringBuilder();    try     {      //建立StreamReader對象      using (StreamReader sr = new StreamReader(Server.MapPath("createHTML") + "\\template.html"))       {        String oneline;        //讀取指定的HTML檔案模板        while ((oneline = sr.ReadLine()) != null)         {          strhtml.Append(oneline);        }          sr.Close();      }    }    catch(Exception err)    {      //輸出異常資訊      Response.Write(err.ToString());    }    //為標記數組賦值    newContent[0] = txtTitle.Text;//標題    newContent[1] = "BackColor='#cccfff'";//背景色    newContent[2] = "#ff0000";//字型顏色    newContent[3] = "100px";//字型大小    newContent[4] = txtContent.Text;//主要內容    //根據上面新的內容產生html檔案    try    {      //指定要產生的HTML檔案      string fname = Server.MapPath("createHTML") +"\\" + DateTime.Now.ToString("yyyymmddhhmmss") + ".html";      //替換html模版檔案裡的標記為新的內容      for(int i=0;i < 5;i++)      {        strhtml.Replace("$htmlkey["+i+"]",newContent[i]);      }      //建立檔案資訊對象      FileInfo finfo = new FileInfo(fname);      //以開啟或者寫入的形式建立檔案流      using(FileStream fs = finfo.OpenWrite())      {        //根據上面建立的檔案流建立寫資料流        StreamWriter sw = new StreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));      //把新的內容寫到建立的HTML頁面中      sw.WriteLine(strhtml);      sw.Flush();      sw.Close();    }      //設定超級連結的屬性      hyCreateFile.Text = DateTime.Now.ToString("yyyymmddhhmmss")+".html";      hyCreateFile.NavigateUrl = "createHTML/"+DateTime.Now.ToString("yyyymmddhhmmss")+".html";    }    catch(Exception err)    {       Response.Write (err.ToString());    }  }
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 {}     }   } 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.