网站首页 > 技术文章 正文
分享一个旧代码,这个代码是我曾经使用的,用来拷贝图片,很简单!其中的写法与我的一个程序有关,在这里,我来重温一下写法,并分享一下思路,供朋友们借鉴,并请各位高手提出宝贵意见。
当时的代码:
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;
这个是在我程序界面显示完成并统计图片数量的。
条友们,你明白了吗?
猜你喜欢
- 2024-10-01 Excel VBA 事件过程实现数据变化结果也会随之自动更新
- 2024-10-01 每天长时间盯着电脑,这三招帮你缓解眼睛疲劳
- 2024-10-01 Excel-VBA:13、Excel事件程序(vba事件怎么触发)
- 2024-10-01 excel vba常用语句干货分享,错过了就不会再有了(关注!)
- 2024-10-01 设计模式之观察者模式,事件机制的底层原理全面解析(建议收藏)
- 2024-10-01 相同单元格自动变色提醒(相同单元格自动变色提醒怎么取消)
- 2024-10-01 Excel实用技巧:根据条件,锁定某个单元格
- 2024-10-01 苹果电脑这些超实用的隐藏功能,不会用就等于白花钱了!
- 2024-10-01 办公小技巧:制作自动显示子菜单的下拉菜单
- 2024-10-01 常用的、带解释的 VBA 短句(vba常用语句详解)
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)