首页 > 爱护地球环境

streamwriter,streamwriter追加写入换行

C# streamwriter方法写入汉字时乱码

注意:汉字使用GB2312编码

测试页面代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace StreamReaderAndStreamWriter

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine(“读取文本文件内容”);

Console.Write(“输入文本文件所在目录:”);

string sBaseFile= Console.ReadLine();

StreamReaderAndStreamWriter.ReadFile(sBaseFile);

Console.WriteLine(“追加文件”);

StreamReaderAndStreamWriter.AppendText(sBaseFile);

}

}

}

类页面代码:

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

namespace StreamReaderAndStreamWriter

{

class StreamReaderAndStreamWriter

{

//读取文本文件

public static void ReadFile(string sFile)

{

if(File.Exists(sFile))

{

//获取一个文件流对象,用于读写文件

FileStream fs= File.OpenRead(sFile);

//获取一个指向文件流的流读取器

StreamReader sr= new StreamReader(fs,Encoding.GetEncoding(“gb2312”));//以gb2312编码读取文本文件中的汉字,要不然,读取的内容中如果有汉字,则显示为乱码。

//读取所有文本内容

string data= sr.ReadToEnd();

//关闭对象,释放资源

sr.Close();

fs.Close();

Console.WriteLine(string.Format(“读取文件>>{0}”, sFile));

Console.WriteLine(data);

}

else

Console.WriteLine(string.Format(“{0}不存在”,sFile));

}

//追加文本文件

public static void AppendText(string sFile)

{

if(File.Exists(sFile))

{

//编辑文本文件

Console.WriteLine(“输入写入内容”);

string swrite= Console.ReadLine();

//获取一个指向文件流的流编辑器

StreamWriter sw= new StreamWriter(sFile, true, Encoding.GetEncoding(“gb2312”));//这里很重要,看一下这个StreamWriter()格式就一目了然了,sFile声明了文本对象;true声明了可以进行Appedn;Encoding.GetEncoding(“gb2312”)声明了一GB2312编码向文本文件写入内容,这样就可以避免写入汉字出现乱码。

sw.Write(swrite);

//关闭对象,释放资源

sw.Close();

//fs.Close();

Console.WriteLine(“向{0}中追加文件”,sFile);

}

else

Console.WriteLine(“{0}不存在”,sFile);

}

}

}

c#中文件读写StreamWriter问题

1.写文件

using(FileStream fs= File.Open(“test.txt”, FileMode.OpenOrCreate))

{

BinaryWriter bw= new BinaryWriter(fs, Encoding.UTF8);

for(int i= 0; i< 10000000; i++)//写入一千万行数据

{

bw.Write(100.8);//写入一个Double

bw.Write(“abdef”);//写入一个String

bw.Write(“poiu”);//再写一个String

bw.Write((float)88.9);//写入一个float

}

}

2.读取上面写入的文件,注意要对应写入数据类型要相匹配,读取顺序要相匹配

using(FileStream fs= File.Open(“test.txt”, FileMode.Open))

{

BinaryReader br= new BinaryReader(fs, Encoding.UTF8);

while(br.BaseStream.Length> br.BaseStream.Position)//判断是否已读完

{

Console.WriteLine(br.ReadDouble());

Console.WriteLine(br.ReadString());

Console.WriteLine(br.ReadString());

Console.WriteLine(br.ReadSingle());

}

}

引用:

你平时是怎么读取文件的?使用流读取。是的没错,C#给我们提供了非常强大的类库(又一次吹捧了.NET一番),里面封装了几乎所有我们可以想到的和我们没有想到的类

通常我们读取一个文件使用如下的步骤:

1、声明并使用File的OpenRead实例化一个文件流对象,就像下面这样

FileStream fs= File.OpenRead(filename);

或者

FileStream fs= FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);

2、准备一个存放文件内容的字节数组,fs.Length将得到文件的实际大小,就像下面这样

byte[] data= new byte[fs.Length];

3、调用一个文件流的一个方法读取数据到data数组中

fs.Read(data, 0, data.Length);

public static void SafeRead(Stream stream, byte[] data){

int offset=0;

int remaining= data.Length;

//只要有剩余的字节就不停的读

while(remaining> 0){

int read= stream.Read(data, offset, remaining);

if(read<= 0)

throw new EndOfStreamException(“文件读取到”+read.ToString()+”失败!”);

//减少剩余的字节数

remaining-= read;

//增加偏移量

offset+= read;

}

}

有些情况下你不知道流实际的长度比如:网络流。此时可以使用类似的方法读取流直到流里面的数据完全读取出来为止。我们可以先初始化一段缓存,再将流读出来的流信息写到内存流里面,就像下面这样:

public static byte[] ReadFully(Stream stream){

//初始化一个32k的缓存

byte[] buffer= new byte[32768];

using(MemoryStream ms= new MemoryStream()){//返回结果后会自动回收调用该对象的Dispose方法释放内存

//不停的读取

while(true){

int read= stream.Read(buffer, 0, buffer.Length);

//直到读取完最后的3M数据就可以返回结果了

if(read<= 0)

return ms.ToArray();

ms.Write(buffer, 0, read);

}

}

}

下面的方法提供了一种使用指定缓存长度的方式读取流,虽然在很多情况下你可以直接使用Stream.Length得到流的长度,但是不是所有的流都可以得到。

public static byte[] Read2Buffer(Stream stream, int BufferLen){

//如果指定的无效长度的缓冲区,则指定一个默认的长度作为缓存大小

if(BufferLen< 1){

BufferLen= 0x8000;

}

//初始化一个缓存区

byte[] buffer= new byte[BufferLen];

int read=0;

int block;

//每次从流中读取缓存大小的数据,知道读取完所有的流为止

while((block= stream.Read(buffer, read, buffer.Length-read))> 0){

//重新设定读取位置

read+= block;

//检查是否到达了缓存的边界,检查是否还有可以读取的信息

if(read== buffer.Length){

//尝试读取一个字节

int nextByte= stream.ReadByte();

//读取失败则说明读取完成可以返回结果

if(nextByte==-1){

return buffer;

}

//调整数组大小准备继续读取

byte[] newBuf= new byte[buffer.Length*2];

Array.Copy(buffer, newBuf, buffer.Length);

newBuf[read]=(byte)nextByte;

buffer= newBuf;// buffer是一个引用(指针),这里意在重新设定buffer指针指向一个更大的内存

read++;

}

}

//如果缓存太大则使用ret来收缩前面while读取的buffer,然后直接返回

byte[] ret= new byte[read];

Array.Copy(buffer, ret, read);

return ret;

}

C#中StreamWriter类的常用方法有哪些呢

StreamWriter类是 C#中用于写入字符流的类,常用的方法有:

Write方法:写入一个字符串或字符

WriteLine方法:写入一个字符串或字符,并在末尾添加换行符

Flush方法:强制将缓冲区中的数据写入文件

Close方法:关闭该流并释放与之关联的任何资源

Dispose方法:释放该流使用的所有资源

示例代码:

using System;

using System.IO;

namespace StreamWriterExample

{

class Program

{

static void Main(string[] args)

{

using(StreamWriter streamWriter= new StreamWriter(“sample.txt”))

{

streamWriter.WriteLine(“Hello, world!”);

streamWriter.WriteLine(“This is a sample text file created using StreamWriter class.”);

streamWriter.Flush();

streamWriter.Close();

}

}

}

}

本文链接:http://www.ybsfba.com/html/87966591.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。