1. 程式人生 > >C#檔案流

C#檔案流

——FileStream

FileSream操作的是位元組陣列,所以FileStream可以用來操作任何型別的檔案
使用FileStream讀寫資料的步驟

  1. 建立FileStream例項物件
  2. 建立位元組陣列來限定每次讀取資料的大小
  3. 執行讀取資料操作,
  4. 對位元組陣列進行解碼/編碼操作
  5. 關閉流
  6. 釋放流所佔用的資源
string [email protected]"C:\Users\SpringRain\Desktop\new.txt";
FileStream stream = new FileStream(path,FileMode.OpenOrCreate, FileAccess.Read
); byte[] Buffer = new byte[1024 * 1024 * 5]; int R = stream.Read(Buffer, 0, Buffer.Length); string str = Encoding.UTF8.GetString(buffer,0, r); stream.Close(); stream.Dispose();

注意

  • FileStream建構函式常用的三個引數
    • 引數1——路徑
    • 引數2——列舉型別FileMode指定系統開啟檔案的方式(常用Append,OpenOrCreate)
    • 引數3——列舉型別FileAccess,指明對檔案中的資料操作(write,read)
  • 建立的位元組陣列的作用
    • 這個位元組陣列是用於儲存讀取出來的資料的,我們提前定義了數值大小,則陣列中只能存那麼多值這樣就起到了限定的作用
  • 在執行讀取操作,往位元組陣列中填寫資料的時候
    • 如果讀取出來的資料大小不夠填充位元組陣列的大小,系統會用空格填充,但是可以在解碼的時候可以指定擷取位元組陣列中多少資料,用該步驟的返回值確定,該步驟返回一個int型別的值,表示讀取到的實際位元組的長度
    • 引數1——用於存資料的位元組陣列
    • 引數2——重讀取檔案的哪裡開始讀取
    • 引數3——在檔案中讀取資料到哪個位置
  • 對位元組陣列進行解碼操作
    • 引數1——解碼的位元組陣列
    • 引數2——開始解碼位置
    • 引數3——結束解碼位置,其餘的扔掉

上面的過程需要我手動的釋放資源,微軟也考慮到了這一點比較麻煩,所以提供了一種寫法幫助我們自動釋放資源,上面的過程就可以寫成下面這樣子

string path=@"C:\Users\SpringRain\Desktop\new.txt";
using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read)) {
byte[] Buffer = new byte[1024 * 1024 * 5];
int R=stream.Read(Buffer,0,Buffer.Length);
string str=System.Text.Encoding.UTF8.GetString(Buffer,0,R);
            }
//Using會幫助我們自動釋放資源

當然往一個檔案中寫入資料也是這樣的,只需要改一點點引數就好了

string [email protected]"C:\Users\SpringRain\Desktop\new.txt";
using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
string str = "Hello world";
byte[] buffer = Encoding.UTF8.GetBytes(str);
fsWrite.Write(buffer, 0, buffer.Length);
}
//這樣王檔案中寫入資料的話會覆蓋原有的資料,如果想往原來的檔案中新增資料,就把FileMode.OpenOrCreate改為FileMode.Append

下面一個例子用讀取和寫入來實現多媒體檔案的複製

using (FileStream fRead = new FileStream(soucre, FileMode.Open, FileAccess.Read)) {
                using (FileStream fWrite = new FileStream(target, FileMode.Create, FileAccess.Write)) {
                    byte[] buffer = new byte[1024 * 1024 * 5];
                    while (true) {
                        int r = fRead.Read(buffer, 0, buffer.Length);
                        if (r == 0) break;
                        fWrite.Write(buffer, 0, r);
                    }
                }
            }
//我們建立一個負責讀取的流
//建立一個負責寫入的流
//因為檔案可能會比較大,所以我們在讀取的時候 應該通過一個迴圈去讀取
//返回本次讀取實際讀取到的位元組數
//如果返回一個0,也就意味什麼都沒有讀取到,讀取完了

——StreamReader

有時候我們只需要以流的方式讀取文字資料,那麼除了使用FileStream之外,還有一個更簡單的方式——StramReader

string path = @"C:\Users\Blue\Desktop\專案站點.txt";
            using (StreamReader sr = new StreamReader(path,Encoding.Default)) {
                while (!sr.EndOfStream) {
                    Console.WriteLine(sr.ReadLine());
                }
            }
//StreamReader物件的EndOfStream屬性是用來判斷是否讀取完了指定的檔案

——StraemWriter

以流的方式寫入文字資料

using (StreamWriter sw=new StreamWriter(path,true)){
                sw.Write("I am Appended");
            };
//如果省掉第二個bool引數,則會覆蓋原文內容,第二引數表示是否為append

相關推薦

C/C++開發】C++檔案關於seekg失效的問題

關於seekg失效的問題 當file.eof()=1的時候seekg就不好用了,當file.eof()=0的時候seekg是好用的。也就是說當一個檔案讀到尾部以後,不能再用seekg來移動或者定位了。通過建立該檔案新的物件能解決這個問題。 如果只是輸出的話可以用streambuf的rdb

C/C++檔案的示例

準備三個檔案1.txt 2.txt 3.txt #include <iostream> #include <fstream> #include <string> #include <vector> using nam

C++檔案操作

讀取檔案 假如需要按行讀取下列檔案,並且分別通過不同變數讀取路徑以及數字,則可以通過C++流操作 /home/ubuntu/demo.jpg 1 /home/ubuntu/result.jpg 0

C++ /檔案 /BMP檔案讀寫

把一個字元寫到輸出流中:cout.put('c'); // 輸出一個字元 cout<<'c'; // 輸出一個字元,但是此前設定的寬度和填充方式在此起作用 write 函式: 把記憶體中的一塊兒內容寫到一個輸出檔案中,該函式有兩個引數:一個char指標(指向記憶體資料的起始地址)和一個所寫位元組數

C++檔案式讀寫

在看C++程式設計思想中,每個練習基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含義,在看了幾位大牛的博文後,進行整理和總結: 這裡主要是討論fstream的內容: [java] view plain copy print

Visual Studio 2008 、 Windows 環境變數介紹和c++檔案檔案路徑

Visual Studio 2008  和 Windows 環境變數對設定 相對路徑很重要,這樣便於程式碼的移植,即使換一臺計算機,程式碼不用更改配置,直接就能用。 可以在專案的“工具”“屬性頁”對話方塊中任何接受字串的位置使用這些巨集。這些巨集不區分大小寫。 

c++檔案基本用法(fstream, ifstream, ostream)

前言:c++的檔案流處理其實很簡單,前提是你能夠理解它。檔案流本質是利用了一個buffer中間層。有點類似標準輸出和標準輸入一樣。 c++ IO的設計保證IO效率,同時又兼顧封裝性和易用性。本文將會講述c++檔案流的用法。 有錯誤和疏漏的地方,歡迎批評指證。 需要包含的標頭檔

c++檔案基本用法(fstream, ifstream)

c++的檔案流處理其實很簡單,前提是你能夠理解它。檔案流本質是利用了一個buffer中間層。有點類似標準輸出和標準輸入一樣。c++ IO的設計保證IO效率,同時又兼顧封裝性和易用性。本文將會講述c++檔案流的用法。有錯誤和疏漏的地方,歡迎批評指證。需要包含的標頭檔案: <

C++ 檔案fstream的過載

#include<fstream> #include<iostream> using namespace std; //////////////////////////////////////////////// class PhoneNumbe

c++檔案的基本操作

在C++中,有一個stream這個類,所有的I/O都以這個“流”類為基礎的,包括我們要認識的檔案I/O,stream這個類有兩個重要的運算子: 1、插入器(<<) 向流輸出資料。比如說系統有一個預設的標準輸出流(cout),一般情況下就是指的顯示器,所以,cout<<"WriteSt

C 檔案

1      C檔案操作 在ANSI C中,對檔案的操作分為兩種方式,即: ü  流式檔案操作 ü I/O檔案操作 1.1    流式檔案操作 這種方式的檔案操作有一個重要的結構FILE,FILE在stdio.h中定義如下:  以下是引用片段: typedef stru

使用C++檔案庫fstream,讀寫操作十六進位制文字檔案

最近為智慧移動小車編寫上位機軟體的過程中,遇到了檔案讀寫處理的任務,檔案是一般的文字檔案.txt格式的,其內容由十六進位制資料組成。檔案內資料的格式如下: FF FD 03 FD 77 FE 77 1C 27 FF FD 01 FE 00 FE 00 1E 28 FF FE

C++ 檔案處理

包含於#include<stdio.h> 的FILE 類:fread和feof // 讀取檔案塊資料 size_t fread(void *buffer, size_t size, size_t count, FILE *file); fread引數說明:bu

C++ 檔案、字串、字元陣列、字串

在開講之前,先給大家看下面這段C++程式碼。 // definition of function read_file // // return the file's data in string string read_file( string file_name = "t

C++檔案狀態的判別與定位

》檔案流狀態的判別         可以用檔案流物件的下列成員函式來判別檔案流的當前狀態:         # is_open():判定流物件是否與一個開啟的檔案相聯絡,若是,返回true,否則返回false         # good():剛進行的操作成功時返回true

C#檔案

——FileStream FileSream操作的是位元組陣列,所以FileStream可以用來操作任何型別的檔案 使用FileStream讀寫資料的步驟 建立FileStream例項物件 建立位元組陣列來限定每次讀取資料的大小 執行讀取資料操作, 對位

c++ 檔案

檔案操作:FILE*  buffer = fopen("filename",mode);               fopen_s()  FILE*   檔名:  "BusInfo.dat"       開啟方式:1.文字模式:           r       開啟只

C檔案

   流式檔案操作 這種方式的檔案操作有一個重要的結構FILE,FILE在stdio.h中定義如下:  以下是引用片段: typedef struct {   int level;    unsigned flags;     char fd;     unsigned char hold;     int 

C#檔案寫入結構體

1、定義結構體 namespace WindowsFormsApplication1 {         [StructLayout(LayoutKind.Sequential, Pack = 1)]         public struct fsnHead    

C++ 學習筆記之——檔案操作和檔案

1. 檔案的概念 對於使用者來說,常用到的檔案有兩大類:程式檔案和資料檔案。而根據檔案中資料的組織方式,則可以將檔案分為 ASCII 檔案和二進位制檔案。 ASCII 檔案,又稱字元檔案或者文字檔案,它的每一個位元組放一個 ASCII 程式碼,代表一個字元。 二進位制檔案,又稱內部格式檔案或位元