直接上代码:
/***
*
* File类操作,Directory类操作
* 要求:把E盘下的Test文件夹(包括子文件夹)下的所有文件拷贝到F盘
* 思路:1 拿到F盘Test文件夹(包括子文件夹)下的所有文件的路径,并把它们存入集合SourceFilePathArray中。
* 2 同时拿到文件夹的路径时,把路径中的E:改为F:,这样就可以在F盘创建相应的空文件夹。
* 3 把SourceFilePathArray集合中所有路径的E:该为F:,然后进行一一对应存入另外一个集合TargetFilePathArray中。
* 4 利用SourceFilePathArray集合中的路径为源路径,集合TargetFilePathArray中的路径为目标路径,进行一一拷贝。
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace IO练习
{
class Demo3
{
static void Main(string[] args)
{
Demo3 obj = new Demo3();
obj.Test1();
Console.ReadKey();
}
//源文件路径存储集合
List<string> SourceFilePathArray = new List<string>();
//目标文件路径存储集合
List<string> TargetFilePathArray = new List<string>();
/// <summary>
/// 把E盘下的Test文件夹的所有文件拷贝到F盘
/// </summary>
internal void Test1() {
//源文件路径
string SourcePath = @"E:\Test";
//目标文件路径,把E盘替换成F盘
string TargePath = SourcePath.Replace("E:", "F:");
GetDirName(SourcePath);
//把源文件中集合中的文件路径改为目标文件的路径,并一一对应存入另外一个集合
foreach (var item in SourceFilePathArray)
{
string Stritem = item.Replace(SourcePath, TargePath);
TargetFilePathArray.Add(Stritem);
}
//进行文件拷贝
for (int i = 0; i < SourceFilePathArray.Count; i++)
{
Console.WriteLine(TargetFilePathArray[i]);
File.Copy(SourceFilePathArray[i], TargetFilePathArray[i], true);
}
Console.WriteLine("拷贝完成");
}
/// <summary>
/// 获取文件夹下的子文件夹的路径
/// </summary>
/// <param name="FileDir">文件夹路径</param>
private void GetDirName(string FileDir) {
string TargePath = FileDir.Replace("E:", "F:");
//在F盘创建相应的文件夹,不然没法复制
if(!Directory.Exists(TargePath)){
Directory.CreateDirectory(TargePath);
}
if(Directory.Exists(FileDir)){
//获取该文件夹下的所有文件
GetFileName(FileDir);
//获取该文件夹下的所有子文件夹
string[] DirNameArray = Directory.GetDirectories(FileDir);
foreach (var item in DirNameArray)
{
if(Directory.Exists(item)){
//递归调用获取子文件夹的下一级文件夹
GetDirName(item);
}
}
}
}
/// <summary>
/// 获取指定文件夹路径下的文件,并存入集合中
/// </summary>
/// <param name="FilePath">文件夹的路径</param>
private void GetFileName(string FilePath)
{
if (Directory.Exists(FilePath))
{
//获取该文件夹下的所有文件名,不包括子文件夹
string[] FileArray = Directory.GetFiles(FilePath);
foreach (var item in FileArray)
{
if (item != null)
{
//把文件名存入集合中
SourceFilePathArray.Add(item);
}
}
}
}
}
}