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

前言

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

这里围绕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());
    }
}

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用C#中的System.IO类来复制文件夹到服务器。以下是示例代码: ```csharp using System.IO; string sourceDir = @"C:\SourceFolder"; string destinationDir = @"\\ServerName\DestinationFolder"; // Create the destination directory if it does not exist if (!Directory.Exists(destinationDir)) { Directory.CreateDirectory(destinationDir); } // Get the files from the source directory and copy them to the destination directory foreach (string file in Directory.GetFiles(sourceDir)) { string destFile = Path.Combine(destinationDir, Path.GetFileName(file)); File.Copy(file, destFile, true); } // Get the subdirectories from the source directory and copy them to the destination directory foreach (string subDir in Directory.GetDirectories(sourceDir)) { string destSubDir = Path.Combine(destinationDir, Path.GetFileName(subDir)); Directory.CreateDirectory(destSubDir); CopyDirectory(subDir, destSubDir); } ``` 在示例代码中,`sourceDir`变量表示源文件夹的路径,`destinationDir`变量表示目标服务器上的文件夹路径。首先,我们检查目标文件夹是否存在,如果不存在,则创建一个。然后,我们使用`Directory.GetFiles`方法获取源文件夹中的所有文件,并使用`File.Copy`方法将它们复制到目标文件夹。接下来,我们使用`Directory.GetDirectories`方法获取源文件夹中的所有子文件夹,并使用`Directory.CreateDirectory`方法创建它们在目标文件夹中的对应项。最后,我们递归地调用`CopyDirectory`方法以处理每个子文件夹中的文件和子文件夹。 注意,这个示例代码中没有包括错误处理和异常处理,你可能需要根据你的具体情况添加它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarcoPro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值