C#复制文件或文件夹

时间:2015-06-04 15:11:28

标签: c# file copy directory

我正在尝试编写一个程序来保持多个文件夹同步。为此,我需要复制和删除文件和子文件夹。

对我来说,如果一个对象是一个文件或一个文件夹,它没有什么区别,我想创建所有必要的父文件夹并复制该对象,必要时覆盖。我目前正在使用锯齿状的FileSystemInfo数组来保存我的文件/文件夹。

这样做的好处是可以避免重复代码来分别同步文件和文件夹。

但是,我无法弄清楚如何复制FileSystemInfo。我正在寻找一种能够复制/删除/读取创建或修改时间的方法,这些方法适用于文件和文件夹。

2 个答案:

答案 0 :(得分:1)

FileSystemInfo没有Copy或Delete方法,但却是DirectoryInfo和FileInfo的基类。

因此,当您遍历FileSystemInfo对象时,必须转换为正确的具体类并使用特定的复制/删除方法。

foreach( var fsi in fileSystemInfoObjects )
{
     if( fsi is DirectoryInfo )
     {
        var directory =  (DirectoryInfo)fsi;
        //do something
     }
     else if (fsi is FileInfo )
     {
        var file = (FileInfo)fsi;
        //do something
     }
}

答案 1 :(得分:0)

我用sam的答案来帮我解决问题。我所做的是将复制逻辑放在我的自定义类中,这样每当我在代码中使用它时,我就不需要复制逻辑。

public class myFSInfo
{
    public FileSystemInfo Dir;
    public string RelativePath;
    public string BaseDirectory;
    public myFSInfo(FileSystemInfo dir, string basedir)
    {
        Dir = dir;
        BaseDirectory = basedir;
        RelativePath = Dir.FullName.Substring(basedir.Length + (basedir.Last() == '\\' ? 1 : 2));
    }
    private myFSInfo() { }
    /// <summary>
    /// Copies a FileInfo or DirectoryInfo object to the specified path, creating folders and overwriting if necessary.
    /// </summary>
    /// <param name="path"></param>
    public void CopyTo(string path)
    {
        if (Dir is FileInfo)
        {
            var f = (FileInfo)Dir;
            Directory.CreateDirectory(path.Substring(0,path.LastIndexOf("\\")));
            f.CopyTo(path,true);
        }
        else if (Dir is DirectoryInfo) Directory.CreateDirectory(path);
    }
}