xxxxx
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ImgTrans { /// <summary> /// 目录拷贝 /// </summary> class KDirCopy { /// <summary> /// 检测源目录是否存在,如果存在则创建对应目标目录 /// </summary> /// <param name="fml_sDst">目标目录</param> /// <param name="fml_sSrc">源目录</param> /// <returns></returns> public static bool CheckDirs(string fml_sDst, string fml_sSrc) { bool ok1, ok2, ok3; ok1 = Directory.Exists(fml_sDst); ok2 = Directory.Exists(fml_sSrc); if (!ok2) { mg.Msg("请检查源目录格式信息", "源目录不存在"); return false; } // 目标目录不存在则进行创建 if (!ok1) { try { Directory.CreateDirectory(fml_sDst); ok3 = true; return true; } catch (Exception ex) { ok3 = false; mg.Msg(ex.Message, "创建目标目录失败"); return false; } } else { return true; } } /// <summary> /// 文件夹拷贝 /// 从指定的源目录拷贝所有文件到目标目录 /// 如果目标文件存在则跳过拷贝 /// </summary> /// <param name="fml_sDst">目标目录</param> /// <param name="fml_sSrc">源目录</param> /// <returns></returns> public static bool Copy(string fml_sDst, string fml_sSrc) { if (!CheckDirs(fml_sDst, fml_sSrc)) { return false; } /* 迭代拷贝文件 * 1.将源目录存入列表 * 2.检测当前列表第一项目录是否存在,不存在则创建 * 3.检测当前列表第一项目录下的所有文件,并拷贝到目标文件夹下 * 4.检测当前列表第一项目录下的文件夹,添加到列表 * 5.移除第一项 * 6.循环第2到第4步,直到列表项为0 */ List<string> dirs = new List<string>(); dirs.Add(fml_sSrc); while(dirs.Count != 0) { string dst_dir = dirs[0].Replace(fml_sSrc, fml_sDst); // 如果目标目录不存在则创建 if (!Directory.Exists(dst_dir)) { Directory.CreateDirectory(dst_dir); } List<string> fnames = new List<string>(Directory.EnumerateFiles(dirs[0])); foreach(string fname in fnames) { FileInfo fi = new FileInfo(fname); //获取文件信息 string dst_name = dst_dir + @"" + fi.Name; try { // 检测本地是否已经存在该文件,如果存在则跳过 if(!File.Exists(dst_name)) { File.Copy(fname, dst_name); } else { Console.WriteLine("文件 {0} 已存在,跳过拷贝。", dst_name); } } catch (Exception ex) { mg.Msg(ex.Message, "拷贝文件错误"); } } // 列举当前目录下的子目录列表 List<string> sub_dirs = new List<string>(Directory.EnumerateDirectories(dirs[0])); dirs.AddRange(sub_dirs); dirs.RemoveAt(0); } return true; } /// <summary> /// 预留 在独立线程内进行拷贝 /// </summary> /// <param name="fml_sDst"></param> /// <param name="fml_sSrc"></param> /// <returns></returns> public static bool threadCopy(string fml_sDst, string fml_sSrc) { return false; } } }
最后
以上就是魁梧柜子最近收集整理的关于C# 拷贝整个目录的全部内容,更多相关C#内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复