using System;
using System.Collections.Generic;
using
System.ComponentModel;
using System.Data;
using System.Drawing;
using
System.IO;
using System.Linq;
using System.Text;
using
System.Threading.Tasks;
using System.Windows.Forms;
namespace C01文件流
{
public partial class Form1 : Form
{
string path = @"D:\net练习资料";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
LoadTree(path,null);
}
/// <summary>
///
///
</summary>
private void LoadTree(string path, TreeNode
node)
{
//判断1下node是不是null
如果是null代表要将指定目录下的所有的子目录直接加到TreeView下
//将指定路径下的所有的子目录
string[] dirs =
Directory.GetDirectories(path);
//遍历
foreach (string dir in
dirs) //D:\广州传智\20130228.Net训练营四期\20130228.Net基础提升
{
TreeNode node1 = new
TreeNode(Path.GetFileName(dir));
if (node == null)//
如果是null代表要将指定目录下的所有的子目录直接加到TreeView下
{
tvData.Nodes.Add(node1);
}
else//如果不是null 就将节点加载到传进来的节点下面.
{
node.Nodes.Add(node1);
}
if
(Directory.GetDirectories(dir).Length > 0)//判断当前遍历到的目录下面是否还有子目录.
{
LoadTree(dir, node1);//如果有 递归调用将当前遍历到的目录下的子目录加载到当前节点下.
}
}
}
/// <summary>
///
///
</summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void
button1_Click(object sender, EventArgs e)
{
//1.
创建1个文件流对象. 并给这个文件流对象指定操作的文件(路径) 还有指定操作的方式
FileStream stream = new
FileStream(@"d:\2.txt", FileMode.Open);
//2. 准备1个byte数组
以供文件流对象读取数据并放到这个数组里面.
byte[] buffer = new byte[1024 * 1024];
//3. 调用文件流的读数据方法 将读出来的字节放入到buffer数组中.
stream.Read(buffer, 0, buffer.Length);
//100 1M
//4. 将字节数组以指定的编码转换为字符串
string content =
Encoding.Default.GetString(buffer);
txtContent.Text =
content;
//5.关闭文件流
stream.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
DialogResult res = sfd.ShowDialog();
if (res ==
System.Windows.Forms.DialogResult.OK) //弹出1个文件保存的框
{
//1.
创建文件流对象
FileStream stream = new FileStream(sfd.FileName,
FileMode.Create);
//2. 调用文件流写入的方法.
string content =
txtContent.Text;
//3. 将字符串以指定的编码转换为字节数组.(二进制)
byte[]
buffer = Encoding.UTF8.GetBytes(content); //1024
//调用文件流对象的写入方法
stream.Write(buffer, 0, buffer.Length);
stream.Dispose();
}
//
}
private void button3_Click(object sender, EventArgs e)
{
//1. 准备个用于读数据的文件流
using (FileStream streamReader = new
FileStream(@"F:\HD\2.tp", FileMode.Open))
{
//2. 准备1个用于写数据的文件流
using (FileStream streamWriter = new
FileStream(@"d:\21.tp", FileMode.Create))
{
//3. 准备1个字节数组用于保存读出来的数据
byte[] data = new byte[1024 * 1024 * 2];
//4. 用读的文件流将数据读出来 放到字节数组中.
int length = 0;
do
{
length =
streamReader.Read(data, 0, data.Length);
streamWriter.Write(data, 0, length);
} while (length
>= data.Length); //1000 980
//5.
调用写的文件流将字节数组写入.
//6. 关闭文件流
MessageBox.Show("操作成功!");
}
}
////1. 准备个用于读数据的文件流
//FileStream streamReader = new
FileStream(@"F:\HD\2.tp", FileMode.Open);
////2.
准备1个用于写数据的文件流
//FileStream streamWriter = new FileStream(@"d:\21.tp",
FileMode.Create);
////3. 准备1个字节数组用于保存读出来的数据
//byte[] data =
new byte[1024 * 1024 * 2];
////4. 用读的文件流将数据读出来 放到字节数组中.
//int length = 0;
//do
//{
//
length = streamReader.Read(data, 0, data.Length);
//
streamWriter.Write(data, 0, length);
//} while (length >=
data.Length); //1000 980
////5. 调用写的文件流将字节数组写入.
////6. 关闭文件流
//streamWriter.Dispose();
//streamReader.Dispose();
//MessageBox.Show("操作成功!");
}
private void button4_Click(object sender, EventArgs e)
{
//被using管理的对象 一处using块 就会自动调用这个对象的Dispose方法
//如果类的对象要被using管理
这个对象的类必须IDisposeable接口.
//using的本质其实就是1个try-finally
将using中的代码生成在了try中,
调用该对象的Dispose方法写在了finally中
//所以Dispose方法无论如何都会调用.
using (FileStream stream
= new FileStream(@"d:\1.txt", FileMode.Open))
{
byte[] buffer = new byte[1024*1024];
stream.Read(buffer, 0,
buffer.Length);
stream.Dispose();
}
}
private void TestUsing()
{
using
(Person p = new Person())
{
Console.WriteLine("我在using中");
return;
}// (p as IDisposable).Dispose();
Console.WriteLine("我出来了.////");
}
private void button5_Click(object sender, EventArgs e)
{
//TestUsing();
FileStream fs = File.Open(@"d:\1.txt",
FileMode.Open);
}
}
}
原文:http://www.cnblogs.com/kexb/p/3660400.html