实战教程:基于C#的文件遍历与图片拷贝代码全解析

实战教程:基于C#的文件遍历与图片拷贝代码全解析

首页模拟经营代号XY更新时间:2024-06-04

分享一个旧代码,这个代码是我曾经使用的,用来拷贝图片,很简单!其中的写法与我的一个程序有关,在这里,我来重温一下写法,并分享一下思路,供朋友们借鉴,并请各位高手提出宝贵意见。

当时的代码:

private void copyimg_Click(object sender, EventArgs e) { int n = 0; string 源照片 = @"H:\0000\cs\"; string 照片库 = @"H:\0000\0000\照片库\"; string 保存位置 = download_Path; var files = Directory.EnumerateFiles(源照片, "*.jpg", SearchOption.TopDirectoryOnly); foreach (var f in Files) { FileInfo fileInfo = new FileInfo(f); var fs = Directory.EnumerateFiles(照片库, "*.jpg", SearchOption.AllDirectories); foreach (var item in fs) { FileInfo 库file = new FileInfo(item); if (库file.Name == fileInfo.Name) { File.Copy(库file.FullName, 保存位置 "/okimg/" 库file.Name, true); Thread.Sleep(50); Application.DoEvents(); n = 1; File.AppendAllText(保存位置 "/存在.txt", n "|" fileInfo.Name Environment.NewLine); } } } richTextBox1.Text = "完成" n; }

其中:

public static string download_Path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取当前文件所在路径 string 指定文件路径 = download_Path "照片下载信息";

首先,这个“指定文件路径”为什么这么写呢?原因是download_Path是获取的当前文件路径,方便程序编译成软件后路径错误,而且,这个写法是为了复用,所以采用了这个写法。

现在我来分解下上面的代码:

private void copyimg_Click(object sender, EventArgs e)

这个是我界面的一个按钮,当点击时触发。

int n = 0; string 源照片 = @"H:\0000\cs\"; string 照片库 = @"H:\0000\0000\照片库\"; string 保存位置 = download_Path;

这个很好理解了,定义一个计数器的起始和源照片及保存位置。

var files = Directory.EnumerateFiles(源照片, "*.jpg", SearchOption.TopDirectoryOnly);

这个使用EnumerateFiles遍历源目录下的所有jpg图片文件,参数设为TopDirectoryOnly表示仅查找顶级目录下的图片文件。这个根据自己的情况可改为查找包括子目录即可。

接着就是处理这个IEnumerable了,我采用了foreach循环遍历,这个没有使用更好的写法是因为我的图片文件不是很多,采用异步和多线程和这个差不多,可能还没这个块。

如果图片特别多还还是建议采用异步和多线程,原因是,异步和多线程在分配资源是也会占用CPU时间的,所以在少量图片时效率反而可能不如foreach,如果不知道哪个更好,可以测试一下。

但无论如何,在大量图片时不建议foreach,因为这个还会占用大量CPU,很可能会导致界面卡死,个人意见,仅供参考。

File.Copy(库file.FullName, 保存位置 "/okimg/" 库file.Name, true);

这个是拷贝的主命令,还有别的写法,不多数,自行查看资料。

Thread.Sleep(50); Application.DoEvents();

这个写法主要是防止界面卡死的,其实这个写法是不建议的,这样写,可以防止界面卡斯但速度会慢很多,这样就把前面提高速度的写法优势消除了,这里,我不建议使用,至于少量图片不追求速度的可以使用,有时间我写一个测试代码,以比较两者的优劣供大家参考。

File.AppendAllText(保存位置 "/存在.txt", n "|" fileInfo.Name Environment.NewLine);

这个代码是采用追加的写法把已拷贝的图片名写入一个文件中,方便查看和验证结果。并每个图片后面用EnvironmentNewLine进行换行。

richTextBox1.Text = "完成" n; 这个是在我程序界面显示完成并统计图片数量的。

条友们,你明白了吗?

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved