关于某一路径下所有文件的遍历提出,随后复制或进行剪切的简单实例
目的:
找到系统中特定类型的某些文件,随后选中保存于listbox中,选中系统中某个已存在路径,将文件复制或剪切到该路径中
一,页面设置。
(需要两个textbox,两个button,一个listbox)
2查找遍历查询的初始路径,设置button1的click事件
private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog s1 = new SaveFileDialog();
s1.Title = "遍历位置";
s1.Filter = "遍历位置(*.)|*." ;
s1.FilterIndex = 1;
s1.FileName = "从此处遍历";
if (
s1.ShowDialog() == DialogResult.OK)
{
}
textBox1.Text = Path.GetDirectoryName(s1.FileName).ToString();
}
3从初始位置开始遍历
插入list保存遍历到的文件,编写函数进行遍历
public static List<string> Wenjian = new List<string>();
public static void Director(string dir)
{
DirectoryInfo d = new DirectoryInfo(dir);
FileSystemInfo[] fsinfos = d.GetFileSystemInfos();
foreach (FileSystemInfo fsinfo in fsinfos)
{
if (fsinfo is DirectoryInfo) //判断是否为文件夹
{
Director(fsinfo.FullName);//递归调用
}
else
{
Wenjian.Add(fsinfo.FullName);
}
}
}
4,将wenjian中保存的路径插入到listbox中,在button1的click事件中在最后插入如下代码。
Director(textBox1.Text);
for(int a=0;a<Wenjian.Count;a++)
{
listBox1.Items.Add(Wenjian[a]);
}
5选择保存的文件的路径
设置button2的click事件如下:
private void button2_Click(object sender, EventArgs e)
{
SaveFileDialog s1 = new SaveFileDialog();
s1.Title = "保存文件位置";
s1.Filter = "位置文件(*.)|*.";
s1.FilterIndex = 1;
s1.FileName = "存放于此处";
if (
s1.ShowDialog() == DialogResult.OK)
{
}
textBox2.Text = Path.GetDirectoryName(s1.FileName).ToString();
}
6,将listbox中保存路径的文件进行复制或进行剪切
创建函数进行复制或剪切:
public void CopyToFileTianhouzhui(string sourceName, string folderPath)
{
/* 假设sourceName为D:\try\尝试.txt
Path.GetFileNameWithoutExtension(sourceName);得到尝试
Path.GetExtension(sourceName);得到.txt
Path.GetFileName(sourceName);得到尝试.txt
Path.GetDirectoryName(sourceName); 得到D:\try
string newPath = Path.ChangeExtension(sourceName, "doc");//更改文件扩展名为doc也即D:\try\尝试.doc
*/
string fileName = Path.GetFileName(sourceName);
//目标整体路径
string targetPath = Path.Combine(folderPath, fileName);
//如果路径下存在当前文件
if (System.IO.File.Exists(targetPath))
{
//改变文件名的方式
for (int a = 1; a < 100000; a++)
{
fileName = string.Format("{0}({1}){2}", Path.GetFileNameWithoutExtension(sourceName), a, Path.GetExtension(sourceName));//如果加一万个数字后缀还是有同名文件,我认了,覆盖吧,我累了
targetPath = Path.Combine(folderPath, fileName);
//到了不存在同名时跳出
if (!System.IO.File.Exists(targetPath))
break;
}
}
FileInfo file = new FileInfo(sourceName);
file.CopyTo(targetPath, true);//复制source至targetPath
//file.MoveTo(targetPath);//剪切source至targetPath
}
调用函数实现剪切或复制
在button2的click事件内代码末尾添加如下代码:
while (listBox1.Items.Count > 0)
{
string source = listBox1.Items[0].ToString();
CopyToFileTianhouzhui(@source, textBox2.Text );
listBox1.Items.Remove(listBox1.Items[0]);
label1.Text = listBox1.Items.Count.ToString();
}
完成原定目地
使用
运行程序后点击button1,在saveFileDialog中选择遍历路径,确认后,textbox1中会出现遍历的初始目录,listbox中会出现遍历到的所有文件的路径,
点击button2,在saveFileDIalog中选择保存文件的路径,确认后,textbox2中出现保存文件的路径,同时按照复制函数的不同进行粘贴或剪切,同时listbox中的路径不断被移除。
简单的扩展的想法
1实时显示listbox中的路径数量,
2对粘贴或剪切可以进行选择
3可以对遍历的文件的后缀名做出一定的约束
4设置button2在误触情况下的反应而不至于卡出程序。
5对listbox添加选中增删及全部清空操作。
6是否需要让程序取得管理员的权限来浏览目录及文件,推荐文章https://www.cnblogs.com/Interkey/p/RunAsAdmin.html
7界面的优化
注:本例中的复制文件函数以及遍历函数来自优快云中的他人,很抱歉没有记录准确来源,抱歉。如有发现来源的请留言链接,谢谢