1. 程式人生 > >System.IO名稱空間最一般的功能

System.IO名稱空間最一般的功能

/*System.IO 名稱空間包含允許讀寫檔案和資料流的型別以及提供基本檔案和目錄支援的型別。
 *在這個命中空間裡,最常用的只有2個類:File類和Directory類。
 *File類,提供用於建立、複製、刪除、移動和開啟檔案的靜態方法,並協助建立 FileStream 物件。
 *Directory類,公開用於建立、移動和列舉通過目錄和子目錄的靜態方法。
 *下面的這些程式展示了它們最常見的用法。
 */


using System;
using System.IO;

namespace SystemIO
{
 class AppEnter
 {
  /// <summary>
  /// 應用程式的主入口點。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //////////////////////////////////////////////////////////////
   ///下面這些函式嘗試使用System.IO.File類的靜態方法
   ///建立、拷貝、刪除、移動、開啟檔案以及向檔案追加文字
   
   //TestFile.CreateFile();
   //System.Console.ReadLine();

   //TestFile.CopyFile();
   //System.Console.ReadLine();

   //TestFile.DeleteFile();
   //System.Console.ReadLine();

   //TestFile.MoveFile();
   //System.Console.ReadLine();

   //TestFile.OpenFile();
   //System.Console.ReadLine();

   //TestFile.AppendText();
   //System.Console.ReadLine();

   ///////////////////////////////////////////////////////////////
   ///下面這些函式嘗試使用System.IO.Directory類的靜態方法
   ///建立、移動、刪除以及列舉目錄和子目錄
   
            //TestDirectory.CreateDir();
   //System.Console.ReadLine();

   //TestDirectory.MoveDir();
   //System.Console.ReadLine();

   //TestDirectory.DeleteDir();
   //System.Console.ReadLine();

   //TestDirectory.dir();
   //System.Console.ReadLine();

   //TestDirectory.dirFile();
   //System.Console.ReadLine();
  }
 }

 class TestFile
 {
  /// <summary>
  /// 建立檔案
  /// </summary>
  public static void CreateFile()
  {
   System.Console.WriteLine("CreateFile()");

   //檔案的路徑
   string path = @"E:/TestFile/MyTest.txt";

   //如果檔案已經存在就刪除
   if(File.Exists(path))
   {
    File.Delete(path);
   }

   /*using 語句定義一個範圍,在此範圍的末尾將處理物件。
    * using (expression type identifier = initializer) statement 其中:
    *  expression 希望在退出 using 語句時呼叫 Dispose 的表示式。
    * 也就是說在using語句結束時會呼叫fs的Dispose方法
    * */

   //建立檔案
   using(FileStream fs = File.Create(path, 1024))
   {
    //Byte陣列,給一個unicode
    Byte[] info = new System.Text.UTF8Encoding(true).GetBytes("This is some text in the file./n");
    //向檔案新增一些資訊
    fs.Write(info, 0, info.Length);
   }

   //讀入檔案並顯示
   using(StreamReader sr = File.OpenText(path))
   {
    string s = "";
    while((s = sr.ReadLine()) != null)
    {
     System.Console.WriteLine(s);
    }
   }
  }
 
  /// <summary>
  /// 拷貝檔案
  /// </summary>
  public static void CopyFile()
  {
   System.Console.WriteLine("CopyFile()");

   string path = @"E:/TestFile/MyTest.txt";
   string path2 = path + "temp";

   System.Console.WriteLine(path2);

   try
   {
    //建立檔案
    //using (FileStream fs = File.Create(path)) {}
    TestFile.CreateFile();
  
    //確保目標不存在
    File.Delete(path2);

    //拷貝檔案
    File.Copy(path, path2);
    Console.WriteLine("{0} copied to {1}", path, path2);

    //重新拷貝同一個檔案,仍然應該成功
    File.Copy(path, path2, true);
    Console.WriteLine("The second Copy operation succeeded, which was expected.");
   }

   catch
   {
    Console.WriteLine("Double copy is not allowed, which was not expected.");
   }
  }  
 
  /// <summary>
  /// 刪除檔案
  /// </summary>
  public static void DeleteFile()
  {
   System.Console.WriteLine("DeleteFile()");
   string path = @"E:/TestFile/MyTest.txt";
   try
   {
    //刪除檔案
    File.Delete(path);
    Console.WriteLine("{0} was successfully deleted.", path);
   }
   catch (Exception e)
   {
    Console.WriteLine("The process failed: {0}", e.ToString());
   }
  }

  /// <summary>
  /// 移動檔案
  /// </summary>
  public static void MoveFile()
  {
   string file = "MyTest.txt";
   string path = @"E:/TestFile";
   string path2 = path + @"/temp";
   string file2 = path2 + "//" + file;
   file = path + "//" + file;

   try
   {
    // Move the file.
    File.Move(file, file2);
    Console.WriteLine("{0} was moved to {1}.", file, file2);              
   }
   catch (Exception e)
   {
    Console.WriteLine("The process failed: {0}", e.ToString());
   }
  }

  /// <summary>
  /// 開啟檔案
  /// </summary>
  public static void OpenFile()
  {
   string path = @"E:/TestFile/MyTest.txt";

   //開啟流並讀回來
   using(FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None))
   {
    byte[] b = new byte[1024];
    System.Text.UTF8Encoding temp = new System.Text.UTF8Encoding(true);

    while(fs.Read(b, 0, b.Length) > 0)
    {
     Console.WriteLine(temp.GetString(b));
    }

    try
    {
     //得到同一個檔案,一定會發生異常,因為第一次開啟該檔案是不分享的
     using(FileStream fs2 = File.Open(path, FileMode.Open))
     {
     }
    }
    catch(Exception e)
    {
     Console.Write("Opening the file twice is disallowed.");
     Console.WriteLine(", as expected: {0}", e.ToString());
    }
   }
  }

  /// <summary>
  /// 將文字追加到檔案
  /// </summary>
  public static void AppendText()
  {
   string path = @"E:/TestFile/MyTest.txt";
   //如果檔案不存在,就建立一個檔案,並寫入文字
   if (!File.Exists(path))
   {
    //建立檔案,並寫入文字
    using (StreamWriter sw = File.CreateText(path))
    {
     sw.WriteLine("Hello");
     sw.WriteLine("And");
     sw.WriteLine("Welcome");
    }           
   }

   //向檔案裡邊寫如文字
   using (StreamWriter sw = File.AppendText(path))
   {
    sw.WriteLine("This");
    sw.WriteLine("is Extra");
    sw.WriteLine("Text");
   }          
   
   //開啟檔案,讀取文字,顯示到控制檯窗體
   using (StreamReader sr = File.OpenText(path))
   {
    string s = "";
    while ((s = sr.ReadLine()) != null)
    {
     Console.WriteLine(s);
    }
   }
  }
 }

 class TestDirectory
 {
  /// <summary>
  /// 建立目錄
  /// </summary>
  public static void CreateDir()
  {
   //指定目錄
   string path = @"e:/MyDir";

   try
   {
    //確定目錄是否已經存在
    if (Directory.Exists(path))
    {
     Console.WriteLine("That path exists already.");
     return;
    }

    //建立目錄
    DirectoryInfo di = Directory.CreateDirectory(path);
    Console.WriteLine("The directory was created successfully at {0}.",
     Directory.GetCreationTime(path));    
   }
   catch (Exception e)
   {
    Console.WriteLine("The process failed: {0}", e.ToString());
   }
  }

  /// <summary>
  /// 移動目錄
  /// </summary>
  public static void MoveDir()
  {
   string sPath = @"e:/MyDir";
   string dPath = @"e:/TestFile/MyDir";

   if(!Directory.Exists(sPath))
   {
    return;
   }

   if(Directory.Exists(dPath))
   {
    return;
   }

   Directory.Move(sPath, dPath);
  }

  /// <summary>
  /// 刪除目錄
  /// </summary>
  public static void DeleteDir()
  {
   string path = @"e:/MyDir";

   if(Directory.Exists(path))
   {
    Directory.Delete(path, true);
   }
   else
   {
    System.Console.WriteLine("目錄不存在。哈哈!");
   }
  }

  /// <summary>
  /// 檢視目錄下的子目錄
  /// </summary>
  public static void dir()
  {
   
   string[] dirs = Directory.GetDirectories(@"e:/TestFile");
   //Console.WriteLine("The number of directories starting with p is {0}.", dirs.Length);

   foreach(string dir in dirs)
   {
    Console.WriteLine(dir);
   }   
  }

  /// <summary>
  /// 檢視目錄下的檔案
  /// </summary>
  public static void dirFile()
  {
   DirectoryInfo di = new DirectoryInfo(Environment.CurrentDirectory);
   FileInfo[] fi = di.GetFiles();
   Console.WriteLine("The following files exist in the current directory:");
   foreach (FileInfo fiTemp in fi)
    Console.WriteLine(fiTemp.Name);
  }
 }
}