FileStream讀寫文件

FileStream類:操作字節(jié)的,可以操作任何的文件
StreamReader類和StreamWriter類:操作字符的,只能操作文本文件。
1、FileStream類
FileStream類
命名空間:
System.IO
(1)構(gòu)造函數(shù):

FileStream(String,?FileMode):使用指定的路徑和創(chuàng)建模式初始化FileStream
類的新實(shí)例。
FileStream(String,?FileMode,?FileAccess):使用指定的路徑、創(chuàng)建模式和讀/寫權(quán)限初始化 FileStream 類的新實(shí)例。FileMode 枚舉:

Append如果它存在,并且查找到該文件的末尾,或者創(chuàng)建一個(gè)新文件,請打開該文件。 這要求 FileIOPermissionAccess.Append 權(quán)限。 FileMode.Append 可以僅在結(jié)合使用 FileAccess.Write。 嘗試查找該文件將引發(fā)結(jié)束之前將其置于 IOException 異常,并且任何嘗試讀取失敗,將引發(fā) NotSupportedException
異常。
Create 指定操作系統(tǒng)應(yīng)創(chuàng)建一個(gè)新的文件。 如果該文件已存在,則會(huì)覆蓋它。 這要求 FileIOPermissionAccess.Write 權(quán)限。 FileMode.Create 等效于請求,如果該文件不存在,則使用 CreateNew; 否則為使用 Truncate。 如果該文件已存在但為隱藏的文件, UnauthorizedAccessException 則會(huì)引發(fā)異常。
CreateNew 指定操作系統(tǒng)應(yīng)創(chuàng)建一個(gè)新的文件。 這要求 FileIOPermissionAccess.Write 權(quán)限。 如果該文件已存在, IOException 則會(huì)引發(fā)異常。
Open 指定操作系統(tǒng)應(yīng)打開現(xiàn)有文件。 若要打開該文件的能力是依賴于指定的值 FileAccess 枚舉。 一個(gè) System.IO.FileNotFoundException 如果文件不存在將引發(fā)異常。
OpenOrCreate
指定操作系統(tǒng)應(yīng)打開一個(gè)文件,是否它存在,則否則,應(yīng)創(chuàng)建一個(gè)新的文件。 如果使用打開該文件 FileAccess.Read,F(xiàn)ileIOPermissionAccess.Read 權(quán)限是必需的。 如果文件訪問是 FileAccess.Write,F(xiàn)ileIOPermissionAccess.Write 權(quán)限是必需的。 如果使用打開該文件 FileAccess.ReadWrite,這兩個(gè) FileIOPermissionAccess.Read 和 FileIOPermissionAccess.Write
權(quán)限是必需的。
Truncate 指定操作系統(tǒng)應(yīng)打開現(xiàn)有文件。 當(dāng)打開文件時(shí),應(yīng)被截?cái)?,以便其大小為零字?jié)。 這要求 FileIOPermissionAccess.Write 權(quán)限。 嘗試從文件中讀取使用打開 FileMode.Truncate 導(dǎo)致 ArgumentException 異常。

FileAccess
枚舉:

Read:對文件的讀取訪問權(quán)限。 可以從文件讀取數(shù)據(jù)。 將與結(jié)合起來 Write 為讀/寫訪問。
ReadWrite:讀取和寫入到文件的訪問。 可以寫入和從文件中讀取數(shù)據(jù)。Write:對文件的寫入訪問權(quán)限。 數(shù)據(jù)可以寫入該文件。 將與結(jié)合起來 Read 為讀/寫訪問
(2)方法
public override int
Read(byte[] array, int offset, int count);public override void
Write(byte[] array, int offset, int count);Dispose():釋放由 Stream 使用的所有資源Close()關(guān)閉當(dāng)前流并釋放與之關(guān)聯(lián)的所有資源(如套接字和文件句柄)。(3)實(shí)例代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //FileStream類的命名空間

namespace Filestream讀寫文件
{
class Program
{
static void Main(string[] args)
{
//FileStream 操作字節(jié)的
//1.創(chuàng)建FileStream類對象
FileStream fsread = new FileStream(@"F:\C#projects\abc.txt",FileMode.OpenOrCreate,FileAccess.Read);
byte[] buffer=new byte[102410242]; //定義一個(gè)2M的字節(jié)數(shù)組
//返回本次實(shí)際讀取到的有效字節(jié)數(shù)
int r=fsread.Read(buffer,0,buffer.Length); //每次讀取2M放到字節(jié)數(shù)組里面
//將字節(jié)數(shù)組中每一個(gè)元素按照指定的編碼格式解碼成字符串
string s=Encoding.Default.GetString(buffer,0,r);
//關(guān)閉流
fsread.Close();
//釋放流所占用的資源
fsread.Dispose();
Console.WriteLine(s); //打印讀取到的內(nèi)容
Console.ReadKey();
}
}
}
結(jié)果為:

(4)將創(chuàng)建文件流對象的過程寫在using當(dāng)中,會(huì)自動(dòng)的幫助我們釋放流所占用的資源。
(將數(shù)據(jù)寫入文件)代碼為:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //FileStream類的命名空間

namespace Filestream讀寫文件
{
class Program
{
static void Main(string[] args)
{

        //將創(chuàng)建文件流對象的過程寫在using當(dāng)中,會(huì)自動(dòng)的幫助我們釋放流所占用的資源
        using (FileStream fsWrite = new FileStream(@"F:\C#projects\abc.txt", FileMode.OpenOrCreate, FileAccess.Write))
        {
            string str="看數(shù)據(jù)會(huì)不會(huì)被覆蓋掉";
            byte[] buffer=Encoding.Default.GetBytes(str);
            fsWrite.Write(buffer, 0, buffer.Length);
        }
        Console.WriteLine("寫入完成...");
        Console.ReadKey();
    }
}

}
運(yùn)行結(jié)果為:

(5)實(shí)現(xiàn)多媒體文件的復(fù)制
代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //FileStream類的命名空間

namespace 多媒體文件復(fù)制
{
class Program
{
static void Main(string[] args)
{
//思路:就是先將要復(fù)制的多媒體文件讀取出來,然后再寫入到指定的地方
string s_path = @"C:\Users\mei\Desktop\1、復(fù)習(xí).avi"; //要讀取的文件路徑(文件有58.3M)
string d_path = @"C:\Users\mei\Desktop\new.avi"; //存放的路徑
CopyFile(s_path, d_path);
Console.WriteLine("復(fù)制完成...");
Console.ReadKey();

    }
    public static void CopyFile(string source,string target)    //自定義文件復(fù)制函數(shù)
    {
        //創(chuàng)建負(fù)責(zé)讀取的流
        using (FileStream fsread = new FileStream(source, FileMode.Open, FileAccess.Read))
        {
            //創(chuàng)建一個(gè)負(fù)責(zé)寫入的流
            using (FileStream fswrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
            {
                byte[] buffer=new byte[1024*1024*5];    //聲明一個(gè)5M大小的字節(jié)數(shù)組
                //因?yàn)槲募?8.3M,要循環(huán)讀取
                while(true)
                {
                    int r=fsread.Read(buffer, 0, buffer.Length);    //返回本次實(shí)際讀取到的字節(jié)數(shù)
                    //如果返回一個(gè)0時(shí),也就意味著什么都沒有讀到,讀取完了
                    if(r==0)
                        break;
                    fswrite.Write(buffer,0,r);

                }
                
           }

        }
    }
}

}
運(yùn)行結(jié)果:

2、StreamReader類和StreamWriter類
(1)StreamReader 類
實(shí)現(xiàn)一個(gè) TextReader,使其以一種特定的編碼從字節(jié)流中讀取字符。
構(gòu)造函數(shù):

StreamReader(Stream,?Encoding):用指定的字符編碼為指定的流初始化 StreamReader 類的一個(gè)新實(shí)例。
屬性:

EndOfStream:獲取一個(gè)值,該值指示當(dāng)前的流位置是否在流結(jié)尾。
方法:

ReadLine():從當(dāng)前流中讀取一行字符并將數(shù)據(jù)作為字符串返回。(覆蓋 TextReader.ReadLine()。)實(shí)例1--使用StreamReader 類讀取一個(gè)文本文件

代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace StreamReader類和StreamWriter類
{
class Program
{
static void Main(string[] args)
{
//使用StreamReader來讀取一個(gè)文本文件
using (StreamReader sr = new StreamReader(@"F:\C#projects\abc.txt",Encoding.Default))
{
while (!sr.EndOfStream)
{
Console.WriteLine(sr.ReadLine()); //讀取一行之后,在控制臺(tái)打印輸出
}

        }
        Console.ReadKey();
    }
}

}
運(yùn)行結(jié)果:

(2)StreamWriter類
實(shí)現(xiàn) TextWriter 用于將字符寫入到流中特定的編碼。
構(gòu)造函數(shù):

StreamWriter(Stream):新實(shí)例初始化 StreamWriter 類為使用 utf-8 編碼及默認(rèn)的緩沖區(qū)大小指定的流。StreamWriter(Stream,?Encoding):新實(shí)例初始化 StreamWriter 為通過使用指定的編碼及默認(rèn)的緩沖區(qū)大小指定的流的類。StreamWriter(String,?Boolean):新實(shí)例初始化 StreamWriter 類為指定的文件使用默認(rèn)的編碼和緩沖區(qū)大小。 如果該文件存在,則可以將其覆蓋或向其追加。 如果該文件不存在,此構(gòu)造函數(shù)將創(chuàng)建一個(gè)新文件。方法:

Write(String):將字符串寫入流。(覆蓋 TextWriter.Write(String)。)實(shí)例---使用StreamWriter類向文件中寫入內(nèi)容

代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace StreamReader類和StreamWriter類
{
class Program
{
static void Main(string[] args)
{

        //使用StreamWriter來寫入一個(gè)文本文件,解決亂碼使用:System.Text.Encoding.Default
        using (StreamWriter st = new StreamWriter(@"F:\C#projects\abc.txt",true,System.Text.Encoding.Default))
        {
            
               st.Write("非常好用的類1");
        }
        Console.WriteLine("寫入完成...");
        Console.ReadKey();
    }
}

}
結(jié)果:


作者:陽光下的Smiles
來源:CSDN
原文:https://blog.csdn.net/liyuqian199695/article/details/70135584
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容