如题。
比如将C盘的DATA目录及子目录下的文件同步备份到D盘的BAK目录下,为了节约时间,在上次备份后未修改过的文件不要复制,上次备份后新增的文件要添加,上次备份后删除的文件同步删除

解决方案 »

  1.   

    如果需要实时监控的话 就使用FileSystemWatcher 对C盘的data 目录进行监控 处理文件系统给你的事件;如果不需要的话 就查看文件夹和文件的attribute 吧 一对时间就知道有没有被修改了
    但这要考虑不同文件系统的区别(FAT/FAT32/NTFS/...) 要做到代码可以应用到不同文件系统上可能要花点功夫
      

  2.   

    FileSystemWatcher完全可以达到你的要求.
      

  3.   

    Windows Service里面用FileSystemWatcher监视文件夹里面的文件,lz可以查下
      

  4.   

    FileSystemWatcher好像是要把程序运行起来,时刻监视文件夹里的文件。
    而我是想要做一个程序,添加到计划任务中,设置成比如每天晚上执行,在每次执行前检查一下文件夹里的变化情况
      

  5.   

    FileSystemWatcher 
    是啊,event知道吗,你也可以自己包装,添加event实现文件监视的功能 封装原来的DirectoryInfo类,添加事件,可以代替FileSystemWatcher 类
    using System;
    using System.IO;//封装原来的DirectoryInfo类,添加事件,可以代替FileSystemWatcher 类
    public class DirectoryInfoNotify
    {
        public DirectoryInfoNotify(string path)
        {
            internalDirInfo = new DirectoryInfo(path);
        }
        
        private DirectoryInfo internalDirInfo = null;
        public event EventHandler AfterCreate;
        public event EventHandler AfterCreateSubDir;
        public event EventHandler AfterDelete;
        public event EventHandler AfterMoveTo;
        protected virtual void OnAfterCreate()
        {
            EventHandler afterCreate = AfterCreate;
            if (afterCreate != null)
            {
                
                afterCreate(this, new EventArgs());
            }
        }    protected virtual void OnAfterCreateSubDir()
        {
            EventHandler afterCreateSubDir = AfterCreateSubDir;
            if (afterCreateSubDir != null)
            {
                afterCreateSubDir(this, new EventArgs());
            }
        }    protected virtual void OnAfterDelete()
        {
            EventHandler afterDelete = AfterDelete;
            if (afterDelete != null)
            {
                afterDelete(this, new EventArgs());
            }
        }    protected virtual void OnAfterMoveTo()
        {
            EventHandler afterMoveTo = AfterMoveTo;
            if (afterMoveTo != null)
            {
                afterMoveTo(this, new EventArgs());
            }
        }    // Event firing members
        //激活事件的方法
        public void Create()
        {
            
            internalDirInfo.Create();
            OnAfterCreate();
        }    public DirectoryInfoNotify CreateSubdirectory(string path)
        {
            DirectoryInfo subDirInfo = internalDirInfo.CreateSubdirectory(path);
            OnAfterCreateSubDir();        return (new DirectoryInfoNotify(subDirInfo.FullName));
        }    public void Delete(bool recursive)
        {
            internalDirInfo.Delete(recursive);
            OnAfterDelete();
        }    public void Delete()
        {
            internalDirInfo.Delete();
            OnAfterDelete();
        }    public void MoveTo(string destDirName)
        {
            internalDirInfo.MoveTo(destDirName);
            OnAfterMoveTo();
        }    // Nonevent firing members
        public string FullName
        {
            get { return (internalDirInfo.FullName); }
        }
        public string Name
        {
            get { return (internalDirInfo.Name); }
        }
        public DirectoryInfoNotify Parent
        {
            get { return (new DirectoryInfoNotify(internalDirInfo.Parent.FullName)); }
        }
        public DirectoryInfoNotify Root
        {
            get { return (new DirectoryInfoNotify(internalDirInfo.Root.FullName)); }
        }    public override string ToString()
        {
            return (internalDirInfo.ToString());
        }
    }
      

  6.   

    用SubVersion吧,完全满足你的要求。
    C#没有现成的东西。