操做文件方法簡單總結(File,Directory,StreamReader,StreamWrite )

       對於文件夾,文檔的操做一直處於只知其一;不知其二狀態,有時間閒下來了,好好練習了一把,對文檔,文件的操做有了一個基本的認知,緩存

若要深刻了解,仍是得經過實際的項目才行了,好了廢話很少說,上酸菜!!ide

 注:紅色標題爲園友@李大菜鳥與@flyher補充的方法再次感謝函數

一 基本介紹

    操做文檔,文件夾,須要用到的類編碼

    1 Directory(靜態類) :     用於建立、移動和刪除等操做經過目錄和子目錄
spa

       DirectoryInfo(非靜態):.net

    2 File(靜態類)  :提供用於建立、複製、刪除、移動和打開文件的靜態類,並協助建立 FileStream 對象    3d

       FileInfo(非靜態)code

    3 StreamReader實現一個 TextReader,使其以一種特定的編碼從字節流中讀取字符orm

     StreamWriter:實現一個 TextWriter,使其以一種特定的編碼向流中寫入字符對象

 

二   文件夾操做

  操做文件夾用Directory 或者 DirectoryInfo

  2.1 建立文件夾

 1        string path = @"F:\TestFile";
 2       //建立文件夾
 3         public void CreatFolder(string path)
 4         {
 5             if (Directory.Exists(path))
 6             {
 7                 Directory.Delete(path);
 8             }
 9            Directory.CreateDirectory(path);
10             
11         }
展開代碼

     2.2 刪除文件夾

 1          string path = @"F:\TestFile";
 2 
 3         //刪除文件夾
 4         public void DeleteFolder(string path)
 5         {
 6             //先刪除文件夾中全部文件
 7             DirectoryInfo directoryInfo = new DirectoryInfo(path);
 8             foreach (var directory in directoryInfo.GetFiles())
 9             {
10                 File.Delete(directory.FullName);
11             }
12             //文件夾必須爲空
13             if (Directory.Exists(path))
14             {
15                 Directory.Delete(path);
16             }
17         }
展開代碼

     2.3 移動文件夾

             string path = @"F:\TestFile";
            string newPath = @"F:\NewFile";
       //移動文件夾
        public void MoveFolder(string path, string newPath)
        {
            if (Directory.Exists(path))
            {
                //移動包括文件夾在內的全部文件
                Directory.Move(path,newPath);
            }
        }
展開代碼

     2.4 獲取文件夾下全部文件名

       string path = @"F:\TestFile";

        //獲取文件夾下全部文件名
        public void GetFolderAllFiles(string path)
        {
            DirectoryInfo directory = new DirectoryInfo(path);
            var files = directory.GetFiles();
            foreach (var file in files)
            {
                Console.WriteLine(file.Name);
                Console.WriteLine(file.FullName);//帶文件路徑全名
            }
        }
展開代碼

     2.5  文件夾重命名 

  其實與移動文件夾方法是同樣的,.net並無提供重命名的方法,而是用新路徑替換原路徑以達到重命名的交果

        string name = @"F:\TestFile";
        string newName = @"F:\NewFile";
        //文件夾重命名
        public void Rename(string name ,string newName)
        {
            if (Directory.Exists(name))
            {
                File.Move(name,newName);
            }
        }
展開代碼

     2.6 獲取文件夾下全部文件夾名

        string path = @"F:\TestFile";
        //獲取路徑下全部文件夾
        public void GetAllFolder(string path)
        {
            DirectoryInfo directory = new DirectoryInfo(path);
            DirectoryInfo[] allFolder = directory.GetDirectories();//返回當前目錄的子目錄(文件夾)
            foreach (var folder in allFolder)
            {
                Console.WriteLine(folder.Name);
                Console.WriteLine(folder.FullName);//帶全路徑的名稱
                //還能夠再遍歷子文件夾裏的文件,或文件夾(最好用遞歸的方式)
                folder.GetDirectories();
            }
        }    
展開代碼

     2.7 處理路徑獲得文件名和文件後綴

       string path = @"F:\TestFile";
       //處理路徑獲得文件名和文件後綴,
        public void FormatFile(string path)
        {
            DirectoryInfo directory = new  DirectoryInfo(path);
            FileInfo[] files = directory.GetFiles();
            foreach (var file in files)
            {
                string name = Path.GetFileNameWithoutExtension(file.Name);//取文件名
                string extension = Path.GetExtension(file.Name);//取後綴名
                Console.WriteLine("文件名:{0} 後綴名:{1}",name,extension);
            }
        }
展開代碼

     2.8 判斷路徑是文件或者文件夾(無效路徑返回0)

        string path = @"F:\TestFile";
        //判斷路徑是文件或者文件夾(無效路徑返回0)
        public void IsFileOrFolder(string path)
        {
            DirectoryInfo directory = new DirectoryInfo(path);
            if (directory.Exists)//指定的目錄是否存在
                Console.WriteLine("Folder");
            else if (File.Exists(path))//指定的文件是否存在
                Console.WriteLine("File");
            else
                Console.WriteLine("0");
        }
展開代碼

 

 三 文檔操做(txt)

  須要如下幾個類:Directory 或者DirectoryInfo ,File 或者 FileInfo

   3.1 建立文檔

        string path = @"F:\TestFile\test.txt";
        //建立文檔
        public void CreateFile(string path)
        {
            //文件路徑用Directory判斷是否存在
            if (Directory.Exists(path))
            {
                //先刪除存在的文件 
                if (File.Exists(path))
                {
                    File.Delete(path);
                }
                File.Create(path);
            }
        }
展開代碼

   3.2 複製文檔

      string path = @"E:\TestFile\test.txt";
      string newPath = @"E:\Test2File\newTest.txt";
      //複製文檔
        public void CopyFile(string sourcePath, string destPath)
        {
            //只能針對同一卷軸(盤)下的文件
            //destPath 爲要複製的新地址,(destPath指定的文件名必須是未建立的,執行Copy方法時纔會建立該文件)
            if (File.Exists(sourcePath))
            {
                File.Copy(sourcePath, destPath);
            }
        }
View Code

   3.3  移動文檔

       string path = @"E:\TestFile\test.txt";
       string newPath = @"E:\Test2File\newTest.txt";
       //移動文檔
        public void MoveFile(string SourcePath, string destPath)
        {
            //只能針對同一卷軸(盤)下的文件
            //destPath 爲要移動的新地址(destPath指定的文件名必須是未建立的,執行Move方法時會將Source文件移動到新地址能夠從新命名)
            if (File.Exists(SourcePath))
            {
                File.Move(SourcePath, destPath);
            }
        }
展開代碼

   3.4  刪除文檔

        string path = @"E:\TestFile\test.txt";
       //刪除文檔
        public void DeleteFile(string path)
        {
            if (File.Exists(path))
            {
                File.Delete(path);
            }
        }
展開代碼

 四 文檔讀寫操做(文檔流操做) 對 第三點  的擴充

     須要如下類:FileStream 此類繼承了Stream 類並重寫了大部分方法,並提供多個帶參構造函數,注意:要讀取的目標流不是保持恆定的,而是每讀一次就會相應的減小,在練習時

沒注意,糾結了好久

   4.1 寫入字符

        string path = @"E:\TestFile\test.txt";
        //往以有文檔中寫入字符
        public void CreateText(string path)
        {
            StreamWriter writer=File.CreateText(path);
            //直接寫入字符的write方法,每次寫入都會覆蓋以前的內容
            writer.Write("你好!");
            //把緩存流的數據寫入到基礎流
            writer.Flush();
            //關閉StreamWriter對象及基礎流
            writer.Close();
        }
展開代碼

   4.2 以流的形式寫入文檔

//將一個文件內的數據,以流的方式讀取,而後以流的形式寫入到另外一個文件中
        public void ReadAndWriteFile()
        {
            string readPath = @"E:\TestFile\ReadStream.txt";
            string writePath = @"E:\TestFile\WriteStream.txt";

            //Read
            //打開現有文件以進行讀取
            FileStream rs = File.OpenRead(readPath);
            byte[] buffer = new byte[rs.Length];
            rs.Read(buffer, 0, buffer.Length);  //將文件內容讀到字節流中
            rs.Close();
            //Write
            //打開現有文件以進行寫入
            FileStream stream = File.OpenWrite(writePath);
            stream.Write(buffer, 0, buffer.Length);
            stream.Flush();
            stream.Close();

        }
展開代碼

   4.3 以流的形式追加到文檔

        //將一個文件內的數據,以流的方式讀取,而後以流的形式寫入到另外一個文件中(追加內容)
        public void ReadAndWriteNewFile()
        {
            string readPath = @"E:\TestFile\ReadStream.txt";
            string writePath = @"E:\TestFile\WriteStream.txt";
            //Read
            FileStream rd = File.Open(readPath,FileMode.Open);
            byte[] buffer = new byte[rd.Length];
            rd.Read(buffer, 0, buffer.Length);
            rd.Close();

            //Write
            FileStream wt = File.Open(writePath,FileMode.Append);//設爲追加到原文件中
            wt.Write(buffer,0,buffer.Length);
            wt.Flush();
            wt.Close();
        }
展開代碼

   4.4 讀取目標文檔指定的一行數據

        string paths = @"F:\TestFile\ReadStream.txt";
        int readNum = 3;
        //讀取目標文本指定的某一行數據
        public void ReadoneLine(string path,int readNum)
        {
            //能夠循環讀每一行,而後到Add到集合中,再到集合中作處理
            StreamReader reader = new StreamReader(path,Encoding.Default);
            var streamList = new List<string>();
            int count=0;
            string lineText = string.Empty;

            while ((lineText = reader.ReadLine()) != null)//對於流的讀取每ReadLine一次流中就少一行,所直接在While用讀到的流作判斷,避免二次讀
            {
                streamList.Add(lineText);
            }

            foreach (var item in streamList)
            {
                if (count == readNum - 1)
                {
                    Console.WriteLine(item);
                }
                count++;
            }
            
        }
展開代碼

 

五 讀寫流操做文檔

 須要如下幾個類:StreamReader StreamWriter

  5.1 字符串讀取寫操做

        //讀取文檔並寫入到另外一文檔中(用字符串寫入的方法)
        public void ReadFile() 
        {
            string readPath = @"E:\TestFile\ReadStream.txt";
            string writePath = @"E:\TestFile\WriteStream.txt";
           
           using (StreamReader reader = new StreamReader(readPath,Encoding.Default)) //用默認的編碼格式(必需要轉格式不然亂碼)
           {

               var rd = reader.ReadToEnd();
               
               StreamWriter writer = new StreamWriter(writePath,true,Encoding.UTF8);//須要轉成UTF-8的格式(可轉可不轉格式)
               writer.Write(rd);
               writer.Flush();
               writer.Close();

           }
        }
展開代碼

  5.2 字符流讀寫操做

        //用字符流的方式讀寫文檔
        public void ReadWriteByByte()
        {

            string readPath = @"F:\TestFile\ReadStream.txt";
            string writePath = @"F:\TestFile\WriteStream.txt";
            using (StreamReader reader = new StreamReader(readPath,Encoding.Default))//須要指定編碼,不然讀到的爲亂碼
            {
                #region 錯誤方法
                //Read  注意:文本中的字符只能被讀取一次,第二次時讀取不到了
                //var readStr =reader.ReadToEnd();//第一次讀取
                //char[] buffer = new char[readStr.Length];
                //reader.Read(buffer, 0, buffer.Length);//第二次讀取時,讀不到值
                #endregion
                //Read 
                char[] buffer = new char[10000];
                reader.Read(buffer, 0, buffer.Length);
                //Write
                StreamWriter writer = new StreamWriter(writePath,true,Encoding.UTF8);
                writer.Write(buffer, 0, buffer.Length);
                writer.Flush();
                writer.Close();
            }
展開代碼

 

 

六 總結

     

       本文只對以上幾個類經常使用的方法簡單的介紹了,也是掃了下本身的盲區,若有更好的建議或方法,請指出。

另外若是以爲本文對你有一點小小的幫助不妨點下推薦您的推薦是我寫做的動力!!

相關文章
相關標籤/搜索