我是靠谱客的博主 含糊眼神,最近开发中收集的这篇文章主要介绍C#中FileStream和StreamWriter/StreamReader的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

区别

FileStream 对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法。
但经常使用 StreamReaderStreamWriter 执行这些功能。
这是因为 FileStream 类操作的是字节字节数组,而 StreamReaderStreamWriter 操作的是字符数据。

操作byte数据时要用FileStream

string textContent = fileStream.ReadToEnd();
byte[] bytes = System.Text.Encoding.Default.GetBytes(textContent);

字符数据易于使用, 但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行

FileStream

构造函数

FileStream file = new FileStream(fileName, FileMode.Member);//默认方式,可读可写
FileStream file = new FileStream(fileName, FileMode.Member, FileAccess.Member);

FileAccess枚举成员

成员说明
Read打开文件,用于只读
Write打开文件,用于只写
ReadWrite打开文件,用于读写(默认)

FileMode枚举成员

成员文件存在文件不存在
Append打开文件,流指向文件的末尾,只能与枚举FileAccess.Write联合使用创建一个新文件。只能与枚举FileAccess.Write联合使用
Create删除该文件,然后创建新文件创建新文件
CreateNew抛出异常创建新文件
Open打开现有的文件,流指向文件的开头抛出异常
OpenOrCreate打开文件,流指向文件的开头创建新文件
Truncate打开现有文件,清除其内容。流指向文件的开头,保留文件的初始创建日期抛出异常

/// 用FileStream写文件
public void FileStreamWriteFile(string str)
{
    byte[] byData;
    char[] charData;
    try
    {
       FileStream nFile = new FileStream("love.txt", FileMode.Create);
       //获得字符数组
       charData = str.ToCharArray();
       //初始化字节数组
       byData = new byte[charData.Length];
       //将字符数组转换为正确的字节格式
       Encoder enc = Encoding.UTF8.GetEncoder();
       enc.GetBytes(charData, 0, charData.Length, byData, 0, true);
       nFile.Seek(0, SeekOrigin.Begin);
       nFile.Write(byData, 0, byData.Length);
    }
    catch (Exception ex)
    {
       throw ex;
    }
}

/// FileStream读取文件
public string FileStreamReadFile(string filePath)
{
    byte[] data = new byte[100];
    char[] charData = new char[100];
    try
    {
       FileStream file = new FileStream(filePath, FileMode.Open);
       //文件指针指向0位置
       file.Seek(0, SeekOrigin.Begin);
       //读入两百个字节
       file.Read(data, 0, 200);
       //提取字节数组
       Decoder dec = Encoding.UTF8.GetDecoder();
       dec.GetChars(data, 0, data.Length, charData, 0);
    }
    catch (Exception ex)
    {
       throw ex;
    }
    return Convert.ToString(charData);
}

BinaryReader与BinaryWriter

C#中除了字节类型以外,还有许多其它基本数据类型,例如,int 、bool、float 等等。
BinaryReader 与__BinaryWriter__ 都从 System.Object 直接派生,这些类型可以让我们从基层流中以简洁的二进制格式读取或写入离散数据类型。

using UnityEngine;  
using System;  
using System.Text;  
using System.IO;  
using System.Collections;  
using System.Collections.Generic;  
  
public class FileOperator : MonoBehaviour 
{  
    void Start () 
    {  
        WriteFile ();  
        ReadFile();  
    }  
  
  	// 读取文件  
    void ReadFile()          
    {  
        FileStream fs = new FileStream ("D:\MemoryStreamTest.txt", FileMode.Open, FileAccess.Read);  
        BinaryReader r = new BinaryReader (fs);  
  
        //以二进制方式读取文件中的内容  
        int i = r.ReadInt32 ();  
        float f = r.ReadSingle ();  
        double d = r.ReadDouble ();  
        bool b = r.ReadBoolean ();  
        string s = r.ReadString();  
        Debug.Log (i);  
        Debug.Log (f);  
        Debug.Log (d);  
        Debug.Log (b);  
        Debug.Log (s);  
  
        r.Close ();  
        fs.Close ();  
    }  
  
  	// 写入文件
    void WriteFile()       
    {  
        FileStream fs = new FileStream ("D:\BinaryStreamTest.txt", FileMode.OpenOrCreate);  
        BinaryWriter w = new BinaryWriter (fs);  
  
        //以二进制方式向创建的文件中写入内容   
        w.Write (666);                   //  整型  
        w.Write (66.6f);                // 浮点型  
        w.Write (6.66);                // double型  
        w.Write(true);                 // 布尔型  
        w.Write ("六六六");         // 字符串型  
  
        w.Close ();  
        fs.Close();  
    }    
}  

StreamReader与StreamWriter

StreamReaderStreamWriter 通过使用特定编码在字符字节之间进行转换,提供了高效的流读写功能,可以直接用字符串进行读写,而不用转换成字节数组

文件编码
默认情况下,StreamReaderStreamWriter 类都使用 UTF-8编码。UTF-8编码正确处理 Unicode 字符并确保操作系统的本地化版本之间保持一致。

StreamWriter 类构造函数和常用方法如下:

函数描述
StreamWriter(Stream stream)构造函数,StreamWriter不仅能对FileStream对象,而且能够对NetWorkStream、MemoryStream等继承了Stream类的流对象进行封装;
StreamWriter(string path)构造函数,如需要处理的是文件流,则可直接利用文件路径创建以UTF8编码的StreamWriter对象;
StreamWriter(string path, Encoding encoding)构造函数,同上,可以指明编码格式
Write(string value)向数据流写入数据;
WriteLine(string value)向数据流写入数据,并追加一个换行符(Unix)或回车换行符(Windows);
Close()关闭流,释放资源;

StreamReader 类构造函数和常用方法如下:

函数描述
StreamReader(Stream stream)构造函数,利用流对象创建StreamReader对象;
StreamReader(string path)构造函数,如需要处理的是文件流,则可直接利用文件路径创建以UTF8编码的StreamReader对象;
StreamReader(string path, Encoding encoding)构造函数,同上,可以指明编码格式
string ReadLine()读取数据直到遇到换行符(Unix)或回车换行符(Windows);
string ReadToEnd()读取到文件尾的全部数据
int Peek()返回数据中下一个可用字符的编码值,如到达文件末尾则返回-1;
Close()关闭流,释放资源;
/// StreamReader读取文件
public string StreamReaderReadFile()
{
    string str="";
    try
    {
        FileStream file = new FileStream("love.txt", FileMode.Open);
        StreamReader sr = new StreamReader(file);
        while (sr.ReadLine()!=null)
        {
            str += sr.ReadLine();
        }
        //或者str = sr.ReadToEnd();
        sr.Close();
    }
    catch
    { }
    return str;
}

/// StreamWriter写文件
public void StreamWriterWriteFile()
{
     try
     {
         FileStream nFile = new FileStream("love.txt", FileMode.CreateNew);
         StreamWriter writer = new StreamWriter(nFile);
        
         writer.WriteLine("I love You!");
         writer.WriteLine("Do you love me!");
         writer.Close();
     }
     catch
     { }
} 

最后

以上就是含糊眼神为你收集整理的C#中FileStream和StreamWriter/StreamReader的区别的全部内容,希望文章能够帮你解决C#中FileStream和StreamWriter/StreamReader的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部