C#文件操作集合四(文件复制和移动)

  • Post author:
  • Post category:其他


前言

文件操作是开发过程中经常遇到的,如何创建文件、处理文件、保存文件以及读取文件这些工作是每一位开发都必须经历的。

这里围绕C#文件操作内容,我做了一次系统的梳理,主要包括以下几个模块:

1、文件内容操作:文件读写相关

2、文件检测

3、文件及目录创建和删除

4、文件复制和移动

5、文件加密、解密

6、文件上传、下载

7、文件压缩相关

8、文件操作权限相关



一、小节摘要

本节整理了文件复制和移动相关内容,使用了File类和Directory类。



二、详细内容



1.移动文件(剪贴–粘贴)

/// <summary>
/// 移动文件(剪贴--粘贴)
/// </summary>
/// <param name="dir1">要移动的文件的路径及全名(包括后缀)</param>
/// <param name="dir2">文件移动到新的位置,并指定新的文件名</param>
public static void MoveFile(string dir1, string dir2)
{
    dir1 = dir1.Replace("/", "\\");
    dir2 = dir2.Replace("/", "\\");
    if (File.Exists(HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1))
        File.Move(HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1, HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir2);
}
#endregion

2.复制文件

/// <summary>
/// 复制文件
/// </summary>
/// <param name="dir1">要复制的文件的路径已经全名(包括后缀)</param>
/// <param name="dir2">目标位置,并指定新的文件名</param>
public static void CopyFile(string dir1, string dir2)
{
    dir1 = dir1.Replace("/", "\\");
    dir2 = dir2.Replace("/", "\\");
    if (File.Exists(HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1))
    {
        File.Copy(HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1, HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir2, true);
    }
}

3.复制文件夹(递归)

/// <summary>
/// 复制文件夹(递归)
/// </summary>
/// <param name="varFromDirectory">源文件夹路径</param>
/// <param name="varToDirectory">目标文件夹路径</param>
public static void CopyFolder(string varFromDirectory, string varToDirectory)
{
    Directory.CreateDirectory(varToDirectory);

    if (!Directory.Exists(varFromDirectory)) return;

    string[] directories = Directory.GetDirectories(varFromDirectory);

    if (directories.Length > 0)
    {
        foreach (string d in directories)
        {
            CopyFolder(d, varToDirectory + d.Substring(d.LastIndexOf("\\")));
        }
    }
    string[] files = Directory.GetFiles(varFromDirectory);
    if (files.Length > 0)
    {
        foreach (string s in files)
        {
            File.Copy(s, varToDirectory + s.Substring(s.LastIndexOf("\\")), true);
        }
    }
}

4.将文件移动到指定目录

/// <summary>
/// 将文件移动到指定目录
/// </summary>
/// <param name="sourceFilePath">需要移动的源文件的绝对路径</param>
/// <param name="descDirectoryPath">移动到的目录的绝对路径</param>
public static void Move(string sourceFilePath, string descDirectoryPath)
{
    //获取源文件的名称
    string sourceFileName = GetFileName(sourceFilePath);

    if (Directory.Exists(descDirectoryPath))
    {
        //如果目标中存在同名文件,则删除
        if (IsExistFile(descDirectoryPath + "\\" + sourceFileName))
        {
            DeleteFile(descDirectoryPath + "\\" + sourceFileName);
        }
        //将文件移动到指定目录
        File.Move(sourceFilePath, descDirectoryPath + "\\" + sourceFileName);
    }
}

5.将指定文件夹下面的所有内容copy到目标文件夹下面

/// <summary>
/// 8.6指定文件夹下面的所有内容copy到目标文件夹下面
/// </summary>
/// <param name="srcPath">原始路径</param>
/// <param name="aimPath">目标文件夹</param>
public static void CopyDir(string srcPath, string aimPath)
{
    try
    {
        // 检查目标目录是否以目录分割字符结束如果不是则添加之
        if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar)
            aimPath += Path.DirectorySeparatorChar;
        // 判断目标目录是否存在如果不存在则新建之
        if (!Directory.Exists(aimPath))
            Directory.CreateDirectory(aimPath);
        // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
        //如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法
        //string[] fileList = Directory.GetFiles(srcPath);
        string[] fileList = Directory.GetFileSystemEntries(srcPath);
        //遍历所有的文件和目录
        foreach (string file in fileList)
        {
            //先当作目录处理如果存在这个目录就递归Copy该目录下面的文件

            if (Directory.Exists(file))
                CopyDir(file, aimPath + Path.GetFileName(file));
            //否则直接Copy文件
            else
                File.Copy(file, aimPath + Path.GetFileName(file), true);
        }
    }
    catch (Exception ee)
    {
        throw new Exception(ee.ToString());
    }
}



版权声明:本文为MarcoPro原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。