/// <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);//如果有 遞歸調用將當前遍歷到的目錄下的子目錄加載到當前節點下.
}
}
}
private void button1_Click(object sender, EventArgs e)
{
//獲取所有父Id爲0的那些省份與直轄市
List<Area> list = GetDataByParentId(0);
//將List中的數據綁定到TreeView上。
LoadDataToTree(treeView1.Nodes, list);
}
private void LoadDataToTree(TreeNodeCollection treeNodeCollection, List<Area> list)
{
foreach (Area item in list)
{
TreeNode tnode = treeNodeCollection.Add(item.AreaName);
//記錄當前區域的Id
tnode.Tag = item.AreaId;
//獲取當前Id對應的所有的子城市
List<Area> listSub = GetDataByParentId(item.AreaId);
LoadDataToTree(tnode.Nodes, listSub);
}
}
/// <summary>
/// 根據父Id獲取該區域下面的所有子區域
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
private List<Area> GetDataByParentId(int pid)
{
List<Area> list = new List<Area>();
string sql = "select * from TblArea where AreaPId=@pid";
using (SqlDataReader reader = SqlHelper.ExecuteReader(sql, new SqlParameter("@pid", pid)))
{
if (reader.HasRows)
{
while (reader.Read())
{
Area model = new Area();
model.AreaId = reader.GetInt32(0);
model.AreaName = reader.GetString(1);
model.AreaPId = reader.GetInt32(2);
list.Add(model);
}
}
}
return list;
}
private void button2_Click(object sender, EventArgs e)
{
//1.點擊刪除時,首先獲取用戶選擇的節點的Id
if (treeView1.SelectedNode != null)
{
int areaId = (int)treeView1.SelectedNode.Tag;
//根據areaId刪除當前元素
DeleteByAreaId(areaId);
//刪除當前節點(更新界面)
treeView1.SelectedNode.Remove();
}
else
{
MessageBox.Show("請選擇節點");
}
}
private void DeleteByAreaId(int areaId)
{
//1.先查詢出areaId下面的所有的子元素
List<Area> list = GetDataByParentId(areaId);
foreach (Area item in list)
{
DeleteByAreaId(item.AreaId);
}
string sql = "delete from TblArea where AreaId=@id";
SqlParameter pm = new SqlParameter("@id", areaId);
SqlHelper.ExecuteNonQuery(sql, pm);
}
}
}
/// </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);
}
</pre><pre name="code" class="csharp">