C#中的各种流
来源:互联网 发布:户外主播用的什么网络 编辑:程序博客网 时间:2024/05/29 14:36
//Stream是一个抽象类,不能直接实例化
//FileStream继承于Stream ,读写文件流
//StreamWriter继承于TextWriter(抽象类,继承于MarshalByRefObject, IDisposable),可以操作Stream
//StreamReader继承于TextReader(抽象类,继承于MarshalByRefObject, IDisposable),可以操作Stream
//MemoryStream继承于Stream
//BufferedStream继承于Stream
StreamWriter和StreamReader可以直接操作文件进行读写,但前提是文件是已经存在的,如果没有文件存在,会抛出异常。
//文件流操作
private void btnFileStream_Click(object sender, EventArgs e)
{
string path=@"c:\test.txt";
#region FileStream 读写文件必须以字节形式
//向文件中写入流
using (FileStream fs = File.Create(path))
{
//byte[] info = new UTF8Encoding(true).GetBytes("this is some text");
Byte[] info = Encoding.GetEncoding("UTF-8").GetBytes("this is some text");
fs.Write(info, 0, info.Length);
}
//打开文件读回流
using (FileStream fs = File.OpenRead(path))
{
string result = string.Empty;
byte[] info = new byte[1024];
//UTF8Encoding temp = new UTF8Encoding(true);
while (fs.Read(info, 0, info.Length) > 0)
{
//result += temp.GetString(info);
result += Encoding.GetEncoding("UTF-8").GetString(info);
}
System.Diagnostics.Debug.WriteLine(result);
}
#endregion
#region StreamWriter 以字符的形式写入 1.可以往Stream里写,2.也可以直接往路径文件里写信息(前提是文件已存在)
//打开文件,在文件末尾附加信息
FileStream fileStream = new FileStream(path,FileMode.Append);
StreamWriter sw = new StreamWriter(fileStream);
sw.WriteLine("This is the appended line.");
sw.Close();
fileStream.Close();
//打开文件,在文件末尾附加信息
using (FileStream file = new FileStream(path, FileMode.Append))
{
using (StreamWriter writer = new StreamWriter(file))
//using (StreamWriter writer = new StreamWriter(path))
{
writer.WriteLine("this a the second appended line.");
writer.Write("this a the third appended line.");
}
}
//如果文件已经存在,可以及直接用StreamWriter写入,不用File
//using (StreamWriter writer = new StreamWriter(path))
// {
// writer.WriteLine("this a the second appended line.");
// writer.Write("this a the third appended line.");
// }
#endregion
#region StreamReader 1.可以从Stream里读,2.也可以直接从文件里读信息
//读取文件文本内容 1
using (StreamReader reader = new StreamReader(path,Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
System.Diagnostics.Debug.WriteLine(line);
}
}
//读取文件文本内容 2
using(FileStream fs1=File.OpenRead(path))
{
using (StreamReader reader = new StreamReader(fs1,Encoding.GetEncoding("GB2312")))
{
string result = reader.ReadToEnd();
System.Diagnostics.Debug.WriteLine(result);
}
}
#endregion
#region 内存流,可读可写,操作单位是字节,主要作用是在内存中操作字节流,最后可写入到Stream中
using (MemoryStream ms = new MemoryStream())
{
UnicodeEncoding uniEncoding = new UnicodeEncoding();
byte[] info = uniEncoding.GetBytes(" this is MemoryStream");
//把信息写入到MemoryStream中
ms.Write(info, 0, info.Length);
byte[] result=new byte[ms.Length];
//从流中读取信息到字节数组中
ms.Read(result, 0, info.Length);
using (Stream s = new FileStream("c:/aa.txt",FileMode.Create))
{
//可以将内存流写入到Stream中:this is MemoryStream
ms.WriteTo(s);
}
}
#endregion
//缓冲区是内存中的字节块,用于缓存数据,从而减少对操作系统的调用次数。 缓冲区可提高读取和写入性能。
//BufferedStream
}
写日志:
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "log files(*.log)|*.log|txt files(*.txt)|*.txt|All files(*.*)|*.*";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.FileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".log";
FileStream fs = null;
StreamWriter sw = null;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
fs = (FileStream)saveFileDialog.OpenFile();
sw = new StreamWriter(fs);
sw.Write(txtImportLog.Text);
}
catch (Exception ex)
{
MessageBox.Show("日志导出失败!" + ex.Message);
}
finally
{
sw.Flush();
sw.Close();
fs.Close();
}
}
- C#中的各种流
- C#中的各种流
- C#中的各种路径
- C#中的各种collection 按钮
- C#中的各种泛型
- c# 鼠标中的各种形状
- c#中的各种符号解释【不断更新中】
- C#中的各种Access操纵总结
- C#中的一些符号,各种杂
- C#中的各种Access操纵总结
- c#编程中的各种个人经验总结
- 归纳总结C#中的各种定时器
- C# Framework Class Library 中的各种 Timer
- 归纳总结C#中的各种定时器
- C#中的MessageBox的show的各种重载方法使用
- java 流中的各种read
- 梳理java中的各种流概念
- c#中的流类
- Axure 学习战略
- stm28335-pwm模块-及ccd的时序驱动模块的实现-编程问题——项目问题1
- libc++abi.dylib: terminate_handler unexpectedly threw an exception错误小结
- c++学习总结(一些零碎的小知识点)
- c++_primer_exercise_1331
- C#中的各种流
- 将form表单里的数据封装成对象 json2.js的例子 jquery的serialize方法转换空格为+号的解决方法
- http://blog.csdn.net/xufeng0991/article/details/36672535
- xshell中文乱码设置方法
- 【Java】利用文件输入输出流完成把一个文件夹内的所有文件拷贝的另一的文件夹的操作
- LKT4203 32位高性能RSA防盗版加密芯片
- 计算机视觉的专家和网站
- 所有光鲜亮丽的背后,都曾熬过无数个不为人知的黑夜。 2015-01-20 00:00:25我要分享 5条评论 所有光鲜亮丽的背后,都曾熬过无数个不为人知的黑夜。 爱,就是没有理由的心疼和不设
- IE8中Jquery slideUp、slideDown方法由Position属性引起的Bug