加載樹和文件流

 /// <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">


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章