簡體   English   中英

C#復制文件或文件夾

[英]C# Copy file or folder

我正在嘗試編寫一個程序以使多個文件夾保持同步。 為此,我需要復制和刪除文件和子文件夾。

對我來說,對象是文件還是文件夾都沒有關系,我想創建所有必需的父文件夾並復制對象,並在必要時覆蓋。 我當前正在使用交錯的FileSystemInfo數組來保存我的文件/文件夾。

這具有避免重復代碼以分別同步文件和文件夾的優點。

但是,我不知道如何復制FileSystemInfo。 我正在尋找一種能夠復制/刪除/讀取創建內容或修改時間的方法,該方法適用於文件和文件夾。

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
     }
}

我用山姆的答案來幫助我解決問題。 我所做的就是將復制邏輯放在我的自定義類中,這樣我在代碼中使用它時就不必復制該邏輯。

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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM