FileStream读写文件

FileStream类:操作字节的,可以操作任何的文件
StreamReader类和StreamWriter类:操作字符的,只能操作文本文件。
1、FileStream类
FileStream类
命名空间:
System.IO
(1)构造函数:

FileStream(String, FileMode):使用指定的路径和创建模式初始化FileStream
类的新实例。
FileStream(String, FileMode, FileAccess):使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例。FileMode 枚举:

Append如果它存在,并且查找到该文件的末尾,或者创建一个新文件,请打开该文件。 这要求 FileIOPermissionAccess.Append 权限。 FileMode.Append 可以仅在结合使用 FileAccess.Write。 尝试查找该文件将引发结束之前将其置于 IOException 异常,并且任何尝试读取失败,将引发 NotSupportedException
异常。
Create 指定操作系统应创建一个新的文件。 如果该文件已存在,则会覆盖它。 这要求 FileIOPermissionAccess.Write 权限。 FileMode.Create 等效于请求,如果该文件不存在,则使用 CreateNew; 否则为使用 Truncate。 如果该文件已存在但为隐藏的文件, UnauthorizedAccessException 则会引发异常。
CreateNew 指定操作系统应创建一个新的文件。 这要求 FileIOPermissionAccess.Write 权限。 如果该文件已存在, IOException 则会引发异常。
Open 指定操作系统应打开现有文件。 若要打开该文件的能力是依赖于指定的值 FileAccess 枚举。 一个 System.IO.FileNotFoundException 如果文件不存在将引发异常。
OpenOrCreate
指定操作系统应打开一个文件,是否它存在,则否则,应创建一个新的文件。 如果使用打开该文件 FileAccess.Read,FileIOPermissionAccess.Read 权限是必需的。 如果文件访问是 FileAccess.Write,FileIOPermissionAccess.Write 权限是必需的。 如果使用打开该文件 FileAccess.ReadWrite,这两个 FileIOPermissionAccess.Read 和 FileIOPermissionAccess.Write
权限是必需的。
Truncate 指定操作系统应打开现有文件。 当打开文件时,应被截断,以便其大小为零字节。 这要求 FileIOPermissionAccess.Write 权限。 尝试从文件中读取使用打开 FileMode.Truncate 导致 ArgumentException 异常。

FileAccess
枚举:

Read:对文件的读取访问权限。 可以从文件读取数据。 将与结合起来 Write 为读/写访问。
ReadWrite:读取和写入到文件的访问。 可以写入和从文件中读取数据。Write:对文件的写入访问权限。 数据可以写入该文件。 将与结合起来 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()关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。(3)实例代码

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 操作字节的
//1.创建FileStream类对象
FileStream fsread = new FileStream(@"F:\C#projects\abc.txt",FileMode.OpenOrCreate,FileAccess.Read);
byte[] buffer=new byte[102410242]; //定义一个2M的字节数组
//返回本次实际读取到的有效字节数
int r=fsread.Read(buffer,0,buffer.Length); //每次读取2M放到字节数组里面
//将字节数组中每一个元素按照指定的编码格式解码成字符串
string s=Encoding.Default.GetString(buffer,0,r);
//关闭流
fsread.Close();
//释放流所占用的资源
fsread.Dispose();
Console.WriteLine(s); //打印读取到的内容
Console.ReadKey();
}
}
}
结果为:

(4)将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。
(将数据写入文件)代码为:
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)
{

        //将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源
        using (FileStream fsWrite = new FileStream(@"F:\C#projects\abc.txt", FileMode.OpenOrCreate, FileAccess.Write))
        {
            string str="看数据会不会被覆盖掉";
            byte[] buffer=Encoding.Default.GetBytes(str);
            fsWrite.Write(buffer, 0, buffer.Length);
        }
        Console.WriteLine("写入完成...");
        Console.ReadKey();
    }
}

}
运行结果为:

(5)实现多媒体文件的复制
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; //FileStream类的命名空间

namespace 多媒体文件复制
{
class Program
{
static void Main(string[] args)
{
//思路:就是先将要复制的多媒体文件读取出来,然后再写入到指定的地方
string s_path = @"C:\Users\mei\Desktop\1、复习.avi"; //要读取的文件路径(文件有58.3M)
string d_path = @"C:\Users\mei\Desktop\new.avi"; //存放的路径
CopyFile(s_path, d_path);
Console.WriteLine("复制完成...");
Console.ReadKey();

    }
    public static void CopyFile(string source,string target)    //自定义文件复制函数
    {
        //创建负责读取的流
        using (FileStream fsread = new FileStream(source, FileMode.Open, FileAccess.Read))
        {
            //创建一个负责写入的流
            using (FileStream fswrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
            {
                byte[] buffer=new byte[1024*1024*5];    //声明一个5M大小的字节数组
                //因为文件有58.3M,要循环读取
                while(true)
                {
                    int r=fsread.Read(buffer, 0, buffer.Length);    //返回本次实际读取到的字节数
                    //如果返回一个0时,也就意味着什么都没有读到,读取完了
                    if(r==0)
                        break;
                    fswrite.Write(buffer,0,r);

                }
                
           }

        }
    }
}

}
运行结果:

2、StreamReader类和StreamWriter类
(1)StreamReader 类
实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。
构造函数:

StreamReader(Stream, Encoding):用指定的字符编码为指定的流初始化 StreamReader 类的一个新实例。
属性:

EndOfStream:获取一个值,该值指示当前的流位置是否在流结尾。
方法:

ReadLine():从当前流中读取一行字符并将数据作为字符串返回。(覆盖 TextReader.ReadLine()。)实例1--使用StreamReader 类读取一个文本文件

代码:
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来读取一个文本文件
using (StreamReader sr = new StreamReader(@"F:\C#projects\abc.txt",Encoding.Default))
{
while (!sr.EndOfStream)
{
Console.WriteLine(sr.ReadLine()); //读取一行之后,在控制台打印输出
}

        }
        Console.ReadKey();
    }
}

}
运行结果:

(2)StreamWriter类
实现 TextWriter 用于将字符写入到流中特定的编码。
构造函数:

StreamWriter(Stream):新实例初始化 StreamWriter 类为使用 utf-8 编码及默认的缓冲区大小指定的流。StreamWriter(Stream, Encoding):新实例初始化 StreamWriter 为通过使用指定的编码及默认的缓冲区大小指定的流的类。StreamWriter(String, Boolean):新实例初始化 StreamWriter 类为指定的文件使用默认的编码和缓冲区大小。 如果该文件存在,则可以将其覆盖或向其追加。 如果该文件不存在,此构造函数将创建一个新文件。方法:

Write(String):将字符串写入流。(覆盖 TextWriter.Write(String)。)实例---使用StreamWriter类向文件中写入内容

代码:
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来写入一个文本文件,解决乱码使用: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();
    }
}

}
结果:


作者:阳光下的Smiles
来源:CSDN
原文:https://blog.csdn.net/liyuqian199695/article/details/70135584
版权声明:本文为博主原创文章,转载请附上博文链接!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容