再谈后兵 FileInfo 与 DirectoryInfo类 清晰的winform界面(技术改变世界-cnblog)
前篇写了 File类与Directory类,今天写 他的 实例类,嘿嘿
先上张图:
附上 静态类与实例类的区别:
Fileinfo类与DirectoryInfo类
//文件
File类是静态类,而FileInfo没有静态方法的。File类的静态方法在调用时要执行安全检查。
对于操作单一的文件,用静态方法快,但是如果对对象多种操作,用实例化方法,静态方法会每次都寻找文件,而实例化方法只是引用查找。
方法比较:
Exists方法
1.file类 如果读取文件的权限不够,返回false,如果文件不存在返回false
2.fileinfo类 如果文件不存在或输入的是目录返回false
Create方法
1.如果Create创建目录,路径为空或文件夹为只读那么会出现异常
2.对于fileinfo类的Create,默认情况是建立新文件为 读写访问权限的
Copy CopyTo方法
1.File类 目标文件不能为目录 File.Copy(源文件,目标文件,是否覆盖)
2.FileInfo类 CopyTo file.CopyTo(目标文件,是否覆盖)
Move MoveTo方法
1.File类 在移动的时候,目标文件如果已存在,则异常 File.Move(源文件,目标文件)
2.FileInfo file.MoveTo(目标文件)
Delete方法
1.File类 如果文件正在使用,则异常
2.同上
//目录
方法比较:
Exists方法
1.Directory类 绝对路径和相对路径(当前工作目录) Directory.Exists(目录)
2.DirectoryInfo类 类似 directory.Exist()
Create方法
1.Directory类与DirectoryInfo类 都可以设置访问权限
Move MoveTo Delete方法
1.注意 可以选择 是否移除 子目录及文件
源码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace FileInfoAndDirectoryInfo
{
public partial class File_Directroy_Info : Form
{
public File_Directroy_Info()
{
InitializeComponent();
}
private void File_Directroy_Info_Load(object sender, EventArgs e)
{
//textBox未输入 Button不可用
btnShowInfo.Enabled = false;
btnNewF.Enabled = false;
btnShowInfo2.Enabled = false;
btnNewD.Enabled = false;
btnSelectD.Enabled = false;
btnSelectD.Enabled = false;
btnSelectF.Enabled = false;
btnSelectAll.Enabled = false;
}
//TextBox1 事件
private void txtPathFile_TextChanged(object sender, EventArgs e)
{
btnNewF.Enabled = true;
btnShowInfo.Enabled = true;
}
//TextBox2 事件
private void txtDirectory_TextChanged(object sender, EventArgs e)
{
btnShowInfo2.Enabled = true;
btnNewD.Enabled = true;
}
//TextBox3 事件
private void txtSelect_TextChanged(object sender, EventArgs e)
{
btnSelectD.Enabled = true;
btnSelectF.Enabled = true;
btnSelectAll.Enabled = true;
}
//新建文件 事件
private void btnNewFile(object sender, EventArgs e)
{
lbShowInfo1.Items.Clear();
if (txtPathFile.Text == string.Empty)
{
MessageBox.Show("不能为空");
return;
}
else
{
FileInfo file = new FileInfo(txtPathFile.Text);
if (file.Exists)
{
MessageBox.Show("文件名存在!");
return;
}
else
{
file.Create();
lbShowInfo1.Items.Add(string.Format("提示:{0}已创建",txtPathFile.Text));
}
}
}
//显示文件详细信息 事件
private void btnShowInfo_Click(object sender, EventArgs e)
{
lbShowInfo1.Items.Clear();
if (txtPathFile.Text == string.Empty)
{
MessageBox.Show("文件为空!");
return;
}
else
{
FileInfo file=new FileInfo(txtPathFile.Text);
if (!file.Exists)
{
DialogResult result=MessageBox.Show("文件不存在,是否创建该文件","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning);
if (result == DialogResult.OK)
{
file.Create();
lbShowInfo1.Items.Add(string.Format("提示:{0}已创建", txtPathFile.Text));
ShowInfo(txtPathFile.Text, lbShowInfo1);
}
else
{
return;
}
}
else
{
ShowInfo(txtPathFile.Text, lbShowInfo1);
}
}
}
//定义文件信息显示方法
private void ShowInfo(string filename,ListBox lb)
{
FileInfo file = new FileInfo(filename);
string creatTime = "创建时间:"+file.CreationTime.ToString() ;
string directory = "父目录:"+file.Directory.ToString();
string exist = (file.Exists) ? "文件: 存在" : "文件: 不存在";
string extension = "扩展名:"+file.Extension;
string length = "字节:"+file.Length.ToString();
string isonlyread = (file.IsReadOnly) ? "文件:只读" : "文件:读写";
string name = "文件名:" + file.Name;
string[] strs = { creatTime,directory,exist,extension,length,isonlyread,name};
foreach (var n in strs)
{
lb.Items.Add(n);
}
}
//新建目录 事件
private void btnNewD_Click(object sender, EventArgs e)
{
lbShowInfo2.Items.Clear();
if (txtDirectory.Text == string.Empty)
{
MessageBox.Show("目录为空!");
return;
}
else
{
DirectoryInfo directory = new DirectoryInfo(txtDirectory.Text);
if (directory.Exists)
{
MessageBox.Show("目录名存在!");
return;
}
else
{
directory.Create();
lbShowInfo2.Items.Add("提示: 目录已创建");
}
}
}
private void btnShowInfo2_Click(object sender, EventArgs e)
{
lbShowInfo2.Items.Clear();
if (txtDirectory.Text == string.Empty)
{
MessageBox.Show("目录为空!");
return;
}
else
{
DirectoryInfo directory = new DirectoryInfo(txtDirectory.Text);
if (!directory.Exists)
{
DialogResult result = MessageBox.Show("查询的目录不存在,是否新建该目录", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
if (result == DialogResult.OK)
{
directory.Create();
lbShowInfo2.Items.Add("提示:目录已创建");
ShowInfo2(txtDirectory.Text, lbShowInfo2);
}
else
{
return;
}
}
else
{
ShowInfo2(txtDirectory.Text, lbShowInfo2);
}
}
}
//显示信息的方法
private void ShowInfo2(string directory, ListBox lb)
{
DirectoryInfo dir=new DirectoryInfo(directory);
string creatTime = "创建时间:"+dir.CreationTime.ToString();
string exists=(dir.Exists)? "文件:存在" :"文件不存在";
string length = "父目录:" + dir.Parent.ToString();
string root = "根路径:" + dir.Root.ToString();
string[] strs = { creatTime,exists,length,root};
foreach(var n in strs)
{
lb.Items.Add(n);
}
Directory.GetDirectories(directory);
dir.GetDirectories();
}
private void btnSelect_Click(object sender, EventArgs e)
{
lbShowInfo2.Items.Clear();
DirectoryInfo dir = new DirectoryInfo(txtDirectory.Text);
DirectoryInfo[] dirs=dir.GetDirectories(txtSelect.Text);
foreach (var n in dirs)
{
lbShowInfo2.Items.Add(n);
}
}
private void btnSecletF_Click(object sender, EventArgs e)
{
lbShowInfo2.Items.Clear();
DirectoryInfo dir = new DirectoryInfo(txtDirectory.Text);
FileInfo[] files = dir.GetFiles(txtSelect.Text);
foreach(var n in files)
{
lbShowInfo2.Items.Add(n);
}
}
private void btnSelectAll_Click(object sender, EventArgs e)
{
lbShowInfo2.Items.Clear();
DirectoryInfo dir = new DirectoryInfo(txtDirectory.Text);
FileSystemInfo[] systeminfos = dir.GetFileSystemInfos(txtSelect.Text);
foreach (var n in systeminfos)
{
lbShowInfo2.Items.Add(n);
}
}
}
}