C# 語法---文件讀寫操作

文件讀寫操作

System.IO命名空間有著不同的類,用於執行各種文件操作

1.File  類

提供用於創建、複製、刪除、移動和打開單一文件的靜態方法。Flie的一些方法可以返回FileStream和StreamWriter對象

常用方法:

  • Open(String path,FileMode mode)  以讀/寫 訪問權限打開指定路徑上的FileStream   參數 path 要打開的文件   mode 用於指定文件不存在時是否創建該文件,并確定保留還是覆蓋
  • Create(String)    在指定路徑中創建或覆蓋文件
  • Copy(String,String) 將現有文件複製到新文件,不允許覆蓋同名文件
  • Delete(string path) 刪除指定文件
  • Move(string sourceFileName,string destFileName) (要移動的文件的名稱,包括相對或絕對路徑,文件新路徑和名稱)
  • SetAttributes(string path, FileAttributes fileAttributes) 設置文件屬性(只讀,隱藏)
  • Exist(string path) 確定指定文件是否存在

讀寫:

  • ReadAllLines(string,Encoding) 打開一個文件,使用指定的編碼讀取文件的所有行 (要打開以進行讀取的文件,應用到文件內容的編碼)
  • ReadAllText(string,Encoding)打開一個文本文件,使用指定的編碼讀取文件的所有行
  • WriteAllLines(string path,string[] contents)  創建一個新文件,在其中寫入指定的字節數組,然後關閉該文件  (要寫入的文件,要寫入的文件字符串數組)
  • WriteAllText(string path,string contents)寫入指定字符串
namespace Filetest
{
    class Filetest
    {
        static void Main(string[] args)
        {
            string path = @"D:\YGTfiletest\filetest.txt";  //文件路徑
            try
            {
                using (FileStream fs = File.Create(path))  //使用using,定義範圍,在該範圍結束時回收資源,在指定路徑創建文件
                {
                    Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file");
                    //轉換為字節,寫入數據
                    fs.Write(info, 0, info.Length);  //字節數組,字節偏移量,最多寫入的字節數
                }
                using (StreamReader sr = File.OpenText(path))   //打開文件
                {
                    string s = "";
                    while ((s = sr.ReadLine()) != null)  //讀取文件內容
                    {
                        Console.WriteLine(s);
                    }
                }
                if (File.Exists(path))  //判斷文件是否存在
                {
                    string appendText = "添加內容" + Environment.NewLine;  //Environment 是类,NewLine 是字符串属性,用于获取当前环境中定义的回车换行符字符串。相當於\r\n
                    File.WriteAllText(path, appendText); //寫入指定字符串
                    string readText = File.ReadAllText(path);  //打開文本文件,使用指定的編碼讀取文件的所有行
                    Console.WriteLine(readText);
                    string[] createText = { "A", "B", "C" };
                    File.WriteAllLines(path, createText); //寫入文件的字符串數組
                    string readText2 = File.ReadAllText(path);
                    Console.WriteLine(readText2);
                    string[] readText3 = File.ReadAllLines(path);  //讀取文件的所有行,返回包含文件所有行的字符串数组。
                    foreach (string s in readText3)
                    {
                        Console.WriteLine(s);
                    }
                    Console.ReadKey();
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

2. FileStream  文件流

文件流FileStream 類用於對文件流的操作,與File類單一操作文件方法不同的是,FileStream可以操作字節也就是可以保存任何類型的文件,解決內存問題(操作大的文件)

屬性:

  • CanRead 判斷當前流是否支持讀取,返回bool值
  • CanWrite 判斷當前流是否支持寫入,返回bool值

方法:

  • Read() 從流中讀取數據,返回字節數組
  • ReadByte() 從流中讀取一個字節,并將流內的位置向前提升一個字節
  • Write() 將字節塊(字節數組)寫入該流
  • WriteByte() 將一個字節寫入流內的當前位置,并將流內的位置向前提升一個字節
  • Seek()設置文件讀取或寫入的起始位置
  • Flush()清除該流緩衝區,使得所有緩衝的數據都被寫入到文件中
  • Close()關閉當前流并釋放與之相關聯的所有系統資源

文件訪問方式(FileAccess)

  • FileAccess.Read    對文件進行訪問
  • FileAccess.Write    對文件進行寫操作
  • FileAccess.ReadWrite     對文件進行讀或寫操作

文件打開模式(FileMode)

  • FileMode.Append  打開現有文件向文件追加數據 ,只能與FileAccess.Write一起使用
  • FileMode.Create    創建新文件,若存在,則覆蓋
  • FileMode.CreateNew    創建新文件,若存在,則異常
  • FileMode.OpenOrCreate 打開文件,若不在,則創建
  • FlieMode.Truncate    打開文件,並且清空文件內容
namespace stream
{
    class stream
    {
        static void Main(string[] args)
        {
            //創建FileStream對象,傳入參數文件路徑、打開模式、訪問方式
            FileStream fsread = new FileStream(@"D:\YGTfiletest\filestream.txt",FileMode.OpenOrCreate,FileAccess.Read);
            //字節數組,大小為5M
            byte[] buffer = new byte[1024 * 1024 * 5];
            //返回本次實際讀取到的字節數
            int r = fsread.Read(buffer,0,buffer.Length);
            //Console.WriteLine(r);
            //Console.ReadKey();
            //將buffer字節數組中每個元素解碼城字符串方式
            string s = Encoding.Default.GetString(buffer,0,r);
            //釋放流
            fsread.Close();
            //釋放流所佔用資源
            fsread.Dispose();
            Console.WriteLine(s);

            using (FileStream fsWrite = new FileStream(@"D:\YGTfiletest\filestream.txt", FileMode.OpenOrCreate, FileAccess.Write))
            {
                string str = "aaaa";
                byte [] buffe = Encoding.Default.GetBytes(str);

                fsWrite.Write(buffe,0,buffe.Length);
            }
            Console.WriteLine("已寫入");
            Console.ReadKey();
        }
    }
}

3.MemoryStream內存流(Read、ReadByte、Write 、WriteByte)

MemoryStream類表示的是保存在內存中的數據流,由內存流封裝的數據可以在內存中直接訪問,內存一般用於暫時緩存數據以降低應用程序對臨時緩衝區和臨時文件的需要

與文件流不同的是內存流中的數據以無符號字節數組的形式保存在內存中,系統可以直接訪問這些封裝的數據而不必讀取磁盤文件。讀取速度更快。

MemoryStream屬性:

  • CanRead   獲取一個值,該值指示當前的流是否支持 讀取
  • CanSeek    獲取一個值,該值指示當前流是否支持查找
  • CanTimeout    是否支持超時
  • CanWrite    是否支持寫入
  • Capacity    獲取或設置分配給該流的字節數
  • Length    獲取用字節表示的流的長度
  • Position    獲取或設置流中的當前位置

MemoryStream 方法:

  • BeginRead/EndRead    開始異步讀操作/等待掛起的異步讀取完成
  • BeginWrite/EndWrite    開始異步寫操作/結束異步寫操作
  • Read    從當前流中讀取字節塊并將數據寫入buffer中   (從當前流的position屬性的位置開始讀)
  • ReadByte 讀取一個字節
  • Seek    將當前流的長度設為指定值
  • Write    使用從緩衝區讀取的數據將字節塊寫入當前流
  • WriteByte    將一個字節寫入當前流中的當前位置
  • WriteTo    將此內存流的整個內容寫入另一個流中(內存流向其他流轉換)
namespace ConsoleApplication1
{
    class MemoryStream1
    {
        static void Main(string[] args)
        {
            MemoryStream ms = new MemoryStream();
            byte[] buffer = Encoding.UTF8.GetBytes("ABCDEFG");//字節數組
            ms.Write(buffer,0,7);  //從緩沖區讀取數據寫入流中
            byte[] result = ms.GetBuffer(); //返回寫入內存流的源流數據
            string turnStr  = Encoding.UTF8.GetString(result); //將字節數組轉換成字符串
            Console.WriteLine(turnStr);
            ms.Seek(0,SeekOrigin.Begin);//將流的當前位置設置為開始的位置
            int i = ms.ReadByte();//讀取一個字節,如果達到流的末尾則-1,返回字節的ASCII碼
            Console.WriteLine("流的當前位置",i.ToString());
            byte[] result1 = ms.ToArray();// 流返回一個字節數組,緩衝區,類似GetBuffer
            foreach(var item in result1)
            {
                Console.Write(item.ToString() + "-");
            }
            MemoryStream ms2 = new MemoryStream();
            byte[] buffer2 = Encoding.UTF8.GetBytes("漢字占三個字節");
            ms2.Write(buffer2,0,buffer2.Length);//數據源,索引,長度
            Console.WriteLine("\n"+ms2.Position);//position 可以理解為指針,寫完數據后在最後一位
            int j = ms2.ReadByte();//索引position 在最後一位,所以返回的值為-1,表示在最後
            Console.WriteLine("寫入數據后當前指針指向的值:{0}",j.ToString());

            ms2.Position = 0;
            int k = ms2.ReadByte();
            Console.WriteLine("改變指針后的值:{0}",k.ToString());
            Console.ReadKey();
        }
    }
}

輸出結果
ABCDEFG
流的當前位置
65-66-67-68-69-70-71-
21
寫入數據后當前指針指向的值:-1
改變指針后的值:230

4. Stream Writer(Writer、 WriterLine)

用FileStream類需要許多額外的數據類型轉換工作,Stream Writer類允許直接將字符和字符串寫入文件,不必轉換為字節,一般不針對二進制數據

與創建FileStream對象不同,創建StreamWriter對象不會提供一組類似的選擇,沒有像FileStream那樣指定FileMode、FileAccess屬性,總是有對文件的讀寫權限。所以若要使用高級參數,先在FileStream構造函數中指定,然後創建StreamWrite

 class Program
    {
        static void Main(string[] args)
        {
            FileStream aFile = new FileStream(@"D:\YGTfiletest\streamwriter.txt", FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(aFile);
            sw.WriteLine("換行");  //WriteLine()方法寫入傳遞給它的字符串,后跟有換行
            sw.WriteLine("換行");
            sw.Write("不會換行");//Write()方法只是把傳送給他的字符串寫入文件,不追加換行符
            sw.Write("不會換行");
            sw.Close();
        }
    }

原文地址:https://www.cnblogs.com/ygtup/p/9359247.html

时间: 2024-07-29 07:52:41

C# 語法---文件讀寫操作的相关文章

為 Swift 代碼編寫含有 Mardown 語法的文檔

原文:Documenting Your Swift Code in Xcode Using Markdown 作者:GABRIEL THEODOROPOULOS 译者:kmyhy 在 Xcode 7 的所有新功能中,有一個最引人注目的新功能,能够讓你以更好的方式来书写代码文檔.從 Xcode 7 開始,開發者終於可以在他們的文檔中使用强大 Markdown 語法來進行富文本编辑了,Markdown 語法用一些特殊的關鍵字來描述文檔中的不同部分,比如參數.函數返回值等,從而使這些結構顯示出不同的樣

用Razor語法寫範本-RazorEngine組件介紹【转——非常好,可以用它来代替NVelocity】

RazorEngine 官網網址:http://razorengine.codeplex.com 在找到RazorEngine之前曾經想過其他的方案,如T4與V8 Engine載jquery.template,但T4如果要獨立於MSBuild或Visual Studio執行有點麻煩,而V8 Engine我又不想在Class Library專案中放一堆js檔,後來就想到Razor,因為Razor的相關處理都是寫在System.Web.Razor,雖然Namespace叫System.Web,但根本

(C/C++) FILE 讀寫檔案操作

在C/C++ 讀寫檔案操作比較常見應該是利用 FILE.ifstream.ofstream 在這篇筆記裡頭記錄 FILE.fstream 使用方法及操作 1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <fstream> 5 6 using namespace std; 7 8 9 int main() 10 { 11 /* 12 r : open for

Delphi APP 開發入門(六)Object Pascal 語法初探

Delphi APP 開發入門(六)Object Pascal 語法初探 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:3442 發表時間:2014/06/10 tags: 行動開發 教學 App Delphi XE6 Android iOS Delphi APP 開發入門(五)GPS 定位功能 << 前情 經過前面五週幾乎每週可以寫出一個簡單App後,大家都可以感受到Delphi強大的開發威力!

Makefile 語法簡介

有稍稍在 Linux 下碰過程式設計的開發者應該會知道,make 是用來將程式碼.函式庫.標頭檔及其它資源檔 build 成最終成果(即:最終的應用程式)的超強力輔助工具. 當然了,並不是非得動用到 make 才能 build 程式,或許有什麼程式設計魔人喜歡什麼都自己手動進行:但利用 make 及其參考檔(輸入檔案)Makefile將會讓整個編譯工作輕鬆許多.若您曾經打包過 Debian Package,那麼應該會發現 debuan/rule 這個檔案的語法和 Makefile 幾乎是一模一樣

Java學習筆記(基本語法)

本文件是以學習筆記的概念為基礎,用於自我的複習紀錄,不過也開放各位的概念指證.畢竟學習過程中難免會出現觀念錯誤的問題.也感謝各位的觀念指證. 安裝JDK 在Oracle網站中找自己系統的JDK下載位置 設定 PATH windows10 =>本機=>右鍵內容=>進階系統設定=>進階=>環境變數 設定 第一個程式Hello World 12345678910111213 public class { /** 程式的預設的進入點, 必須是public static, 另外這是Ja

MFC常用的字符串、文件、目录操作(双11版本)

修改日志: 1.增加了list容器存储: 2.修改了IsFile 和 IsDir的实现,使区别于IfExistFile和IfExistDir; 3.修改了部分函数的名称: 4.其他细节修改: 首先是头文件: /* ******* StrDirFile.h ********** ********* 字符串.文件.目录操作函数声明 ********** */ /* author: autumoon */ #ifndef _STR_DIR_FILE_ #define _STR_DIR_FILE_ #p

IOS基礎_Block語法的簡單使用

開始學IOS的時候沒怎麼接觸過block語句,在後來用到的越來越多,就不得不學了,剛開始理解比較困難的,然後自己做了一個例子就慢慢理解了,www.ios5.online不說廢話了,上代碼: 正常的簡單地申明調用一個block語句是這樣的: //申明 int (^yxpBlock)(int, int) =^(int a ) {return a*a ;}; 說明:返回值(^語句塊名稱)(傳人參數類型)=^(傳人參數){主體}: //調用 int result = square(5); 我建了一個測試

開啟MacOS NTFS默認加載只讀改成讀寫

第一步:開啟終端進入root模式 $ sudo -s 第二步:備份NTFS初始文件 # mv /sbin/mount_ntfs /sbin/mount_ntfs_bak 第三步:新建需要掛載的NTFS腳本 # vim /sbin/mount_ntfs #!/bin/sh/sbin/mount_ntfs_orig -o rw,nobrowse "[email protected]" 第四步:設置掛載文件的權限 # chmod a+x /sbin/mount_ntfs 第五步:重啓Mac即