View Code
1 View Code 2 using System; 3 using System.Collections.Generic; 4 using System.ComponentModel; 5 using System.Data; 6 using System.Drawing; 7 using System.IO; 8 using System.Linq; 9 using System.Reflection; 10 using System.Text; 11 using System.Threading.Tasks; 12 using System.Windows.Forms; 13 14 namespace 文件操作 15 { 16 public partial class Form1 : Form 17 { 18 public Form1() 19 { 20 InitializeComponent(); 21 } 22 23 private void btnPath_Click(object sender, EventArgs e) 24 { 25 //改后缀名 改的是字符串 不是真的该文件的后缀名 26 string str = @"D:\1111\1.tt"; 27 string s = Path.ChangeExtension(str, "jpg"); 28 MessageBox.Show("修改成功" + s); 29 //合并路径 可以解决不加斜杠的问题 30 string newPath = Path.Combine(@"c:\temp","1.txt"); 31 MessageBox.Show(newPath.ToString()); 32 //得到指定路径的的父目录 33 string msg = Path.GetDirectoryName(@"F:\传智播客培训\学习笔记"); 34 MessageBox.Show(msg); 35 //获取文件的后缀名 36 //如果不存在则返回空 37 string kuozhangm = Path.GetExtension(@"F:\传智播客培训\学习笔记\字符串与StringBuilder.docx"); 38 MessageBox.Show(kuozhangm); 39 40 //得到指定路径的文件名包括后缀名(如果传入是一个目录路径 得到的是最后一个目录名) 41 string names = Path.GetFileName(@"F:\传智播客培训\学习笔记\字符串与StringBuilder.docx"); 42 string paths = Path.GetFileName(@"c:\123"); 43 MessageBox.Show(names + paths); 44 //得到指定路径的文件名不包括后缀名 45 string namee = Path.GetFileNameWithoutExtension(@"F:\传智播客培训\学习笔记\字符串与StringBuilder.docx"); 46 MessageBox.Show(namee); 47 //根据相对路径返回一个绝对路径 48 string strss = Path.GetFullPath("字符串与StringBuilder.docx"); 49 MessageBox.Show(strss); 50 //获取系统临时文件夹路径 51 string rr = Path.GetTempPath(); 52 MessageBox.Show(rr); 53 //是在临时文件夹下创建一个文件 并且返回路径 54 string filename = Path.GetTempFileName(); 55 MessageBox.Show(filename); 56 //获取当前程序执行的路径 57 string path1 = Assembly.GetExecutingAssembly().Location; 58 Console.WriteLine(path1); 59 60 } 61 62 private void btnDIC_Click(object sender, EventArgs e) 63 { 64 //创建目录 如果目录存在 则不创建 65 Directory.CreateDirectory("e:\\China"); 66 //删除目录 如果目录下有东西 则报错 67 Directory.Delete("e:\\China"); 68 //删除所有 69 Directory.Delete("e:\\China", true); 70 //判断指定目录是否存在 71 bool b = Directory.Exists(@"F:\传智播客培训\学习笔记\字符串与StringBuilder.docx"); 72 Console.WriteLine(b); 73 //当前程序的工作目录,不一定是Debut目录 74 string strr = Directory.GetCurrentDirectory(); 75 Console.WriteLine(strr); 76 //得到目录下的所有子目录 77 string[] patsh = Directory.GetDirectories(@"F:\传智播客培训\学习笔记"); 78 //得到指定目录下的所有文件 79 string[] files = Directory.GetFiles(@"F:\传智播客培训\学习笔记"); 80 //得到所有盘符 81 string[] dirs = Directory.GetLogicalDrives(); 82 //得到指定目录的父目录 83 DirectoryInfo dad=Directory.GetParent(@"F:\传智播客培训\学习笔记"); 84 Console.WriteLine(dad.Name); 85 //移动文件夹\文件\重命名 86 Directory.Move("原路径", "目标路径"); 87 } 88 89 private void btnFile_Click(object sender, EventArgs e) 90 { 91 92 //如果文件不存在则创建一个,如果存在则在原来的基础上追加 93 File.AppendAllText("f:\\1.txt", "往往i达到"); 94 //File.AppendAllLines //追加一行 95 //File.Exists("f:\\1.txt") 判断文件是否存在 96 if( File.Exists("f:\\1.txt")) 97 { 98 //读取文本 每一行作为一个元素 99 string[] lines=File.ReadAllLines("f:\\1.txt"); 100 string[] jpg = File.ReadAllLines("f:\\1.jpg"); 101 //以指定的格式读取文本 ,Encoding.Default指的的是系统的默认的编码格式 102 string[] liness = File.ReadAllLines("f:\\1.txt",Encoding.Default); 103 string[] linesss = File.ReadAllLines("f:\\1.txt", Encoding.UTF8); 104 string[] linessss = File.ReadAllLines("f:\\1.txt", Encoding.GetEncoding("GB2312")); 105 106 } 107 108 //向文件里写内容 109 File.WriteAllText("f:\\1.txt", "sdsdsfsfsafqw"); 110 File.WriteAllText("f:\\1.txt", "sdsdsfsfsafqw",Encoding.UTF8); 111 //未知文件也一样 112 File.WriteAllText("f:\\1.txf", "sdsdsfsfsafqw"); 113 //将每一个元素作为一行写入 114 string[] dad={"sdsdsfsfsafqw","sdsdsfsfsafqw"}; 115 File.WriteAllLines("f:\\1.txt", dad); 116 //复制文件 不允许覆盖同名文件 117 File.Copy("源文件(包含路径)", "到那里的文件(包含文件名)"); 118 //删除指定文件 119 File.Delete("f:\\1.txf"); 120 //移动文件 121 File.Move("原文件", "目标文件"); 122 //创建文件 如果存在则覆盖 123 File.Create("f:\\2.txf"); 124 125 } 126 127 private void btnFileInfo_Click(object sender, EventArgs e) 128 { 129 FileInfo info = new FileInfo("f:\\3.txt"); 130 long length = info.Length; 131 Console.WriteLine(length/1024/1024); 132 133 } 134 135 private void btnDirectoryInfo_Click(object sender, EventArgs e) 136 { 137 DirectoryInfo diri = new DirectoryInfo(@"d:\A"); 138 } 139 140 private void btnStream_Click(object sender, EventArgs e) 141 { 142 //文件流 143 //读 144 //第一个参数路径(这个管道指向那个文件),第二个参数表示管道的类型(这个管道干嘛去) 145 FileStream fs = new FileStream("f:\\3.txt",FileMode.Open); 146 //准备一个byte数组 用来存储读取出来的内容 147 byte[] buffer=new byte[1024*1024]; 148 fs.Read(buffer, 0, buffer.Length);//返回是读取的真实的长度 149 //以指定的编码方式将byte数组转换为字符串 150 string content =Encoding.Default.GetString(buffer); 151 152 fs.Dispose(); 153 //创建文件流 154 //准备字节数组 155 //将内容读取到字节数组中 156 //将字节数组以指定的编码方式转换为字符串 157 //关闭管道 158 159 160 //写 161 //创建文件流 现在要保存 所以文件的模式为Create 162 FileStream stream=new FileStream("f:\\4.txt",FileMode.Create); 163 //得到字符串 164 string contentr = "ddfasfoaskofnaskonfkoasmfkoasmkofmkoa"; 165 //将字符串转换为字节数组 以指定编码将字符串转换为byte数组 166 byte[] butterr = Encoding.Default.GetBytes(content); 167 stream.Write(butterr, 0, butterr.Length); 168 stream.Dispose(); 169 } 170 } 171 }
文件流操作步骤
View Code
1 private void button2_Click(object sender, EventArgs e) 2 { 3 //创建文件流 第1个参数路径(这个管道指向的文件) 第2个参数表示管道的类型(这个管道是去干吗的?) 4 FileStream fs = new FileStream(@"d:\\1.txt", FileMode.Open); 5 //准备1个byte数组 用来存储读取出来的内容 6 byte[] buffer = new byte[1024 * 1024]; 7 //读取 并将内容放入数组 8 //读取的真实的长度... 9 int length = fs.Read(buffer, 0, buffer.Length); 10 //以指定的编码方式将byte数组转换为字符串 11 string content = Encoding.UTF8.GetString(buffer); 12 txtContent.Text = content; 13 //关闭管道 14 fs.Dispose(); 15 16 17 18 19 20 //1.创建文件流 21 //2.准备字节数组 22 //3.将内容读取到字节数组中 23 //4. 将字节数组以指定编码的方式转换为字符串 24 //5. 关闭文件流... 25 26 27 28 29 } 30 31 private void button3_Click(object sender, EventArgs e) 32 { 33 //1. 创建文件流 现在我是要保存 所以文件模式性 create 34 FileStream stream = new FileStream("d:\\2.txt", FileMode.Create); 35 //2. 得到字符串 36 string content = txtContent.Text; 37 //3. 将字符串转换为字节数组 以指定编码将字符串转换为byte数组 38 byte[] buffer = Encoding.UTF8.GetBytes(content); 39 //4. 写入 40 stream.Write(buffer, 0, buffer.Length); 41 //5.关闭文件流 42 stream.Dispose(); 43 MessageBox.Show("ok"); 44 }
以下是自己写的文件的复制、粘贴、剪切、删除程序
View Code
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.IO; 7 using System.Linq; 8 using System.Text; 9 using System.Threading.Tasks; 10 using System.Windows.Forms; 11 12 namespace 文件操作_节点 13 { 14 public partial class Form1 : Form 15 { 16 static string strr = ""; 17 static string type= ""; 18 //MyStream mySt=new MyStream 19 public Form1() 20 { 21 InitializeComponent(); 22 } 23 24 private void btnAddBase_Click(object sender, EventArgs e) 25 { 26 string dic=txtDIC.Text; 27 tvDIC.Nodes.Add(dic);//返回新增的节点 28 29 } 30 31 private void btnAddChild_Click(object sender, EventArgs e) 32 { 33 string dic = txtDIC.Text; 34 tvDIC.SelectedNode.Nodes.Add(dic); 35 } 36 37 private void btnAuto_Click(object sender, EventArgs e) 38 { 39 string path = @"F:\传智播客培训"; 40 GetNode(path,null,tvDIC); 41 42 } 43 void GetNode(string path,TreeNode node,TreeView tv) 44 { 45 if (node == null) 46 { 47 node = tv.Nodes.Add(Path.GetFileName(path));//返回新增的节点 48 } 49 try 50 { 51 string[] patsh = Directory.GetDirectories(path); 52 if (patsh.Length > 0) 53 { 54 foreach (string item in patsh) 55 { 56 TreeNode newTr = node.Nodes.Add(Path.GetFileName(item)); 57 //每个 TreeNode对象都有一个Tag属性 58 newTr.Tag = item; 59 GetNode(item, newTr,tv); 60 } 61 } 62 } 63 catch 64 { 65 66 return; 67 68 } 69 70 } 71 72 private void Form1_Load(object sender, EventArgs e) 73 { 74 string path = @"F:\测试"; 75 GetNode(path, null, tvDIC); 76 //GetNode(path, null, tvCopy); 77 //string[] dirs = Directory.GetLogicalDrives(); 78 //GetNode(dirs[3].ToString(), null,tvAll); 79 //foreach (var item in dirs) 80 //{ 81 // GetNode(item, null); 82 //} 83 } 84 85 private void tvDIC_AfterSelect(object sender, TreeViewEventArgs e) 86 { 87 88 GetAllFiles(tvDIC, lvFile); 89 90 91 } 92 93 private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) 94 { 95 96 strr = lvFile.SelectedItems[0].SubItems[1].Text; 97 type = "copy"; 98 99 } 100 101 private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e) 102 { 103 switch (type) 104 { 105 case "copy": 106 //一种方法是采用File.Copy 107 //File.Copy(strr, Path.Combine(tvDIC.SelectedNode.Tag.ToString(), Path.GetFileName(strr))); 108 //一种方法是采用文件里流 109 MyStream.Wirte(strr, Path.Combine(tvDIC.SelectedNode.Tag.ToString(), Path.GetFileName(strr))); 110 break; 111 case "move": 112 //一种方法是采用File.Move 113 //File.Move(strr, Path.Combine(tvDIC.SelectedNode.Tag.ToString(), Path.GetFileName(strr))); 114 //一种方法是采用文件里流 115 MyStream.Wirte(strr, Path.Combine(tvDIC.SelectedNode.Tag.ToString(), Path.GetFileName(strr))); 116 File.Delete(strr); 117 break; 118 default: 119 break; 120 } 121 122 GetAllFiles(tvDIC, lvFile); 123 } 124 125 private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e) 126 { 127 strr = lvFile.SelectedItems[0].SubItems[1].Text; 128 type = "move"; 129 } 130 131 void GetAllFiles(TreeView tv,ListView lv) 132 { 133 lv.Items.Clear(); 134 TreeNode node = tv.SelectedNode; 135 try 136 { 137 string[] files = Directory.GetFiles(node.Tag.ToString()); 138 foreach (string item in files) 139 { 140 ListViewItem lvi = new ListViewItem(); 141 lvi.Text = Path.GetFileName(item); 142 lvi.SubItems.Add(item); 143 lv.Items.Add(lvi); 144 } 145 } 146 catch 147 { 148 return; 149 } 150 151 } 152 153 private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) 154 { 155 string str = lvFile.SelectedItems[0].SubItems[1].Text; 156 File.Delete(str); 157 GetAllFiles(tvDIC, lvFile); 158 } 159 } 160 class MyStream 161 { 162 public static void Wirte(string sourceFile, string targetFile) 163 { 164 FileStream fsRead = new FileStream(sourceFile, FileMode.Open); 165 FileStream fsWrite = new FileStream(targetFile, FileMode.Create); 166 int length=0; 167 byte[] buffer = new byte[1024 * 1024]; 168 169 //一点一点去读 170 do 171 { 172 //返回读到的长度,最大也就是buffer.Length,由于buffer最大是1M,每次最多能读1M的数据,如果读到的数据是满1M的,证明 173 //这个文件后面可能还有数据,所以还要继续循环下去 174 length = fsRead.Read(buffer, 0, buffer.Length); 175 fsWrite.Write(buffer, 0, length); 176 177 } while (length == buffer.Length); 178 fsRead.Dispose(); 179 fsWrite.Dispose(); 180 } 181 } 182 }
1、 窗体其实就是一个从Form类继承的1个子类
2、 Partial 类编译的时候会编译成1个类
3、 修改控件的Name属性 其实改的就是对象的名称
4、 在后台要用到的控件一定要改名
乱码的原因 可能是编码不同