如何讀寫文件
//創建文件流 FilesStream myfs=new FilesStream(path,FileMode.Create); //創建寫入器 StreamWriter mySw=new StreamWriter(myfs); //將錄入的內容寫入文件 mySw.Write("我是好人"); //關閉寫入器 mySw.Close(); //關閉文件流 myfs.Close();
1.保持內存中數據持久化的方案?
解析:數據庫保存(也是文件:XXX.MDF)
文件(文本文件,xml文件,XX.bin)
2.講FileMode取值
FileMode.Create:看對應目錄下是否有該文件,如果有覆蓋,不會報錯
CreateNew:新建一個文件。如果文件存在會發生異常,提示文件已經存在
FileMode.Open():打開指定路徑下已有文件,為讀取文件做好准備工作.
FileMode.OpenOrCreate():有的話,就讀,沒有就寫
FileMode.Append:在原有文件的結尾追加新的內容
3.講讀取文件設置編碼
解析: StreamReader sr = new StreamReader(fs,Encoding.GetEncoding("utf-8"));
4.IO原理圖
練習,需求說明:
實現小型資源管理器,支持顯示文件信息
使用TreeView控件顯示文件夾結構
使用ListView控件顯示選定文件夾下文件列表
1 /// <summary> 2 /// 將數據綁定到TreeView控件中的根節點 3 /// </summary> 4 private void LoadTreeView() 5 { 6 7 DirectoryInfo dir = new DirectoryInfo(@"E:\"); 8 //返回當前目錄的子目錄 9 DirectoryInfo[] dirs= dir.GetDirectories(); 10 foreach (DirectoryInfo item in dirs) 11 { 12 TreeNode tn = new TreeNode(); 13 tn.Text = item.Name; 14 tn.Tag = item.FullName; 15 this.treeView1.Nodes.Add(tn); 16 } 17 18 } 19 private void Form1_Load(object sender, EventArgs e) 20 { 21 LoadTreeView(); 22 23 } 24 /// <summary> 25 /// 綁定子目錄 26 /// </summary> 27 /// <param name="node"></param> 28 private void BindInfo(TreeNode node) 29 { 30 DirectoryInfo dir = new DirectoryInfo(node.Tag.ToString()); 31 DirectoryInfo[] dirs = dir.GetDirectories(); 32 foreach (DirectoryInfo item in dirs) 33 { 34 TreeNode tn = new TreeNode(); 35 tn.Text = item.Name; 36 tn.Tag = item.FullName; 37 node.Nodes.Add(tn); 38 } 39 //獲取目錄下文件列表,dir是目錄對象 40 FileInfo[] fileInfo = dir.GetFiles(); 41 //定義泛型集合存儲文件信息 42 List<MyFile> files = new List<MyFile>(); 43 //遍歷文件列表 44 foreach (FileInfo item in fileInfo) 45 { 46 MyFile file = new MyFile(); 47 file.FileName = item.Name; 48 float value = item.Length; 49 file.FileLength = float.Parse(Math.Round(value / 1024, 2).ToString()); 50 file.FileType = item.Extension; 51 file.FilePath = item.FullName; 52 files.Add(file); 53 } 54 if (this.listView1.Items!=null) 55 { 56 this.listView1.Items.Clear(); 57 } 58 foreach (MyFile item in files) 59 { 60 ListViewItem lvItem = new ListViewItem(item.FileName); 61 lvItem.SubItems.Add(item.FileLength.ToString()); 62 lvItem.SubItems.Add(item.FileType); 63 lvItem.SubItems.Add(item.FilePath); 64 this.listView1.Items.Add(lvItem); 65 } 66 } 67 //單擊綁定文件和文件夾信息 68 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 69 { 70 //獲取TreeView控件中選中的節點 71 TreeNode node = this.treeView1.SelectedNode; 72 BindInfo(node); 73 74 }
實現文件復制和刪除
1 private void 復制ToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 //用戶選擇目標文件夾 4 DialogResult result= folderBrowserDialog1.ShowDialog(); 5 if (result==DialogResult.OK) 6 { 7 //源文件路勁 8 string sourcePath = this.listView1.SelectedItems[0].SubItems[3].Text; 9 //目標文件路勁 10 string desPath = folderBrowserDialog1.SelectedPath; 11 desPath += "\\" + this.listView1.SelectedItems[0].SubItems[0].Text; 12 //復制文件 13 File.Copy(sourcePath, desPath); 14 MessageBox.Show("復制成功!!!"); 15 } 16 } 17 18 private void 刪除ToolStripMenuItem_Click(object sender, EventArgs e) 19 { 20 string sourcePath = this.listView1.SelectedItems[0].SubItems[3].Text; 21 File.Delete(sourcePath); 22 MessageBox.Show("刪除成功!!"); 23 TreeNode node = this.treeView1.SelectedNode; 24 BindInfo(node); 25 }
總結:
1.讀寫文件的5個步驟:創建文件流、創建讀寫器、讀寫文件、關閉讀寫器、關閉文件流。
2.文件流的類是FileStream,創建一個文件流時,需要指定操作文件的路勁,文件的打開形式和文件的訪問方式。
3.StreamWriter是一個寫入器,StreamReader是一個讀取器。
4.File類用於對文件進行操作,如復制、移動、刪除等,Directory類用於對文件夾進行操作,它們都是靜態類。
5.靜態類只包含靜態成員,非靜態類可以包含靜態成員;靜態類不能包含實例成員,非靜態類可以包含實例成員;靜態類使用類名訪問成員,非靜態類使用她的實例訪問成員。
6.FileInfo類與File類功能類似,也可以完成對文件的基本操作。不同的是File類不可以實例化對象。如果打算多次重用某個文件對象,可以考慮使用FileInfo類,因為並不總是需要安全檢查的。
7.DirectoryInfo類於Directory類功能類似,可以完成對文件夾的基本操作。如果打算多次重用某個目錄對象,可以考慮使用DirectoryInfo類的實例方法。