文件管理
FileStream
:是一个用于读写文件的一个类。它提供了基于流的方式操作文件,可以进行读取、写入、查找和关闭等操作。
第一个参数:path(路径)
相对路径:相对于当前项目的bin目录下的Debug和Realse来说的,只关乎要找的东西在哪,忽略外层地址。(@“”)
绝对路径:D:\WinForms\文件管理\bin (从外向内都直接指向了要查找的文件。)
第二个参数:FileMode
CreateNew = 1,
Create, 创建一个新的文件,如果文件存在,则覆盖该文件
Open, 打开一个已有的文件,如果文件不存在,则抛出异常
OpenOrCreate, 打开一个已有的文件,如果文件不存在,则按照指定路径创建一个新的文件并打开
Append 打开一个已经存在的文件,并将位置锁定到文件的末尾进行追加,不存在则创建第三个参数:FileAccess(文件的读写权限)
首先我们先创建一个winform窗体,拖出下图示例的控件⬇
文本文件写入
private void btnWrite_Click(object sender, EventArgs e) {
//创建文件流
FileStream fileStream = new FileStream(@"myfile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
//2、创建写入器
StreamWriter writer = new StreamWriter(fileStream);
//3、以流的形式写入数据
writer.Write(this.textBox1.Text);
//4、关闭写入器,注意这一步的目的是为了清理写入器中的缓存,证明已经写入成基础流了,所以要关闭
writer.Close();
//5、关闭文件流
fileStream.Close();
}
读取文件内容
private void btnRead_Click(object sender, EventArgs e) {
FileStream fileStream = new FileStream(@"myfile.txt", FileMode.Open);
StreamReader reader = new StreamReader(fileStream);
//读取来自指定位置的流,直到结尾的所有字符
this.textBox1.Text = reader.ReadToEnd();
reader.Close();
fileStream.Close();
}
模拟写入系统日志
private void btnLog_Click(object sender, EventArgs e) {
try {
FileStream fs = new FileStream(@"故意写一个不存在的文件.txt", FileMode.Open);
} catch (Exception ex) {
//日志错肯定不止一个,所以选用追加
FileStream fileStream = new FileStream(@"文件操作项目的错误日志.log", FileMode.Append);
StreamWriter streamWriter = new StreamWriter(fileStream);
streamWriter.WriteLine(DateTime.Now.ToString() + ":[操作文件异常]" + ex.Message);
streamWriter.Close();
fileStream.Close();
}
}
删除文件
private void btnDelete_Click(object sender, EventArgs e) {
string deleteStr = this.txtOrigin.Text;
File.Delete(deleteStr);
}
复制文件
private void btnCoppy_Click(object sender, EventArgs e) {
//1、首先判断目标路径文件是否存在(如果文件存在,直接复制会报错)
if (File.Exists(this.txtTarget.Text)) {
//存在,删除
File.Delete(this.txtTarget.Text);
}
//复制文件
File.Copy(this.txtOrigin.Text, this.txtTarget.Text);
}
移动文件
private void btnMove_Click(object sender, EventArgs e) {
if (File.Exists(this.txtTarget.Text)) {
//存在,删除
File.Delete(this.txtTarget.Text);
}
//如果当前文件存在才移动
if (File.Exists(this.txtOrigin.Text)) {
//存在,则删除
File.Move(this.txtOrigin.Text, this.txtTarget.Text);
} else {
MessageBox.Show("要移动的文件不存在");
}
}
显示指定目录下的所有文件
private void showFolder_Click(object sender, EventArgs e) {
string[] files = Directory.GetFiles(this.txtFolder.Text);
textBox1.Text = "";
for (int i = 0; i < files.Length; i++) {
this.textBox1.Text += (i + 1) + "\t" + files[i] + "\r\n";
}
}
显示指定目录下所有子目录
private void button2_Click(object sender, EventArgs e) {
string[] files = Directory.GetFileSystemEntries(this.txtFolder.Text);
textBox1.Text = "";
for (int i = 0; i < files.Length; i++) {
this.textBox1.Text += (i + 1) + "\t" + files[i] + "\r\n";
}
}
在指定目录下创建一个子目录
private void button3_Click(object sender, EventArgs e) {
Directory.CreateDirectory(this.txtFolder.Text);
}
删除指定目录下所有子目录和文件
private void button4_Click(object sender, EventArgs e) {
//File与FileInfo都能实现,区别就是静态方法和实例方法
//Directory与DirectoryInfo也都能实现,也是静态方法实例方法的区别
//删除的是不能为空的目录
//DirectoryInfo directoryInfo = new DirectoryInfo(this.txtFolder.Text);
//参数表示是否删除子目录和文件,
//true:强制删除,false:该文件夹必须为空才可以删除
//directoryInfo.Delete(true);
Directory.Delete(this.txtFolder.Text, true);
}