Esempio n. 1
0
        protected List <FileSystemWatcherItemData> GetFilterBackupWatcherItemList(List <FileSystemWatcherItemData> itemList)
        {
            var filterList = new List <Backup.FileSystemWatcherItemData>();

            FileSystemWatcherItemData lastItem = null;

            foreach (var item in itemList)
            {
                if ((lastItem?.ChangeType == WatcherChangeTypes.Created) &&
                    (item.ChangeType == WatcherChangeTypes.Changed) &&
                    (lastItem?.FullPath == item.FullPath))
                {
                    //do nothing
                }
                else if ((lastItem?.ChangeType == WatcherChangeTypes.Changed) &&
                         (item.ChangeType == WatcherChangeTypes.Changed) &&
                         (lastItem?.FullPath == item.FullPath))
                {
                    //do nothing
                }
                else
                {
                    filterList.Add(item);
                    lastItem = item;
                }
            }

            return(filterList);
        }
Esempio n. 2
0
        protected void ProcessFileSystemWatchItem(FileSystemWatcherItemData item, string targetPath, string lastTargetPath = null)
        {
            switch (item.ChangeType)
            {
            case WatcherChangeTypes.Changed:
            {
                bool?bFolder = CheckItemTypeFolderOrFile(item.FullPath, item.ChangeType);
                if (bFolder == false)
                {
                    var newTargetPath = m_IStorage.Combine(m_IStorage.Combine(targetPath, m_IStorage.GetFileName(item.WatchPath)), item.Name);
                    if (!m_IStorage.FileExists(newTargetPath))
                    {
                        m_Logger.Writeln($"**Update File, Warning - file does not exist, will copy the updated version {newTargetPath}");

                        var targetDir = m_IStorage.GetDirectoryName(newTargetPath);
                        if (!m_IStorage.DirectoryExists(targetDir))
                        {
                            CreateDirectory(targetDir);
                        }

                        CopyUpdatedFile(item.FullPath, newTargetPath);
                    }
                    else
                    {
                        if (lastTargetPath != null)
                        {
                            var newLastTargetPath = m_IStorage.Combine(m_IStorage.Combine(lastTargetPath, m_IStorage.GetFileName(item.WatchPath)), item.Name);
                            if (m_IStorage.FileExists(newLastTargetPath))
                            {
                                m_IStorage.DeleteFile(newLastTargetPath);
                            }
                            MoveFile(newTargetPath, newLastTargetPath, true);
                        }
                        else
                        {
                            //delete old version if old set not exists, happens with full backup and incremental
                            DeleteFile(newTargetPath);
                        }
                        CopyUpdatedFile(item.FullPath, newTargetPath, true);
                    }
                }

                break;
            }

            case WatcherChangeTypes.Created:
            {
                var sourcePath    = item.FullPath;
                var newTargetPath = m_IStorage.Combine(m_IStorage.Combine(targetPath, m_IStorage.GetFileName(item.WatchPath)), item.Name);

                bool?bFolder = CheckItemTypeFolderOrFile(item.FullPath, item.ChangeType);
                if (bFolder == true)
                {
                    if (!m_IStorage.DirectoryExists(newTargetPath))
                    {
                        CreateDirectory(newTargetPath);
                    }
                    else
                    {
                        m_Logger.Writeln($"**Create Directory, Can't create - directory already exists {newTargetPath}");
                    }
                }
                else if (bFolder == false)
                {
                    if (!m_IStorage.FileExists(newTargetPath))
                    {
                        var dirName = m_IStorage.GetDirectoryName(newTargetPath);
                        if (!m_IStorage.DirectoryExists(dirName))
                        {
                            CreateDirectory(dirName);
                        }
                        CopyNewFile(sourcePath, newTargetPath);
                    }
                    else
                    {
                        m_Logger.Writeln($"**Create File, Can't create - file already exists {newTargetPath}");
                    }
                }

                break;
            }

            case WatcherChangeTypes.Deleted:
            {
                var sourcePath    = item.FullPath;
                var newTargetPath = m_IStorage.Combine(m_IStorage.Combine(targetPath, m_IStorage.GetFileName(item.WatchPath)), item.Name);

                bool?bFolder = CheckItemTypeFolderOrFile(newTargetPath, item.ChangeType);
                if (bFolder == true)
                {
                    if (m_IStorage.DirectoryExists(newTargetPath))
                    {
                        if (lastTargetPath == null)
                        {
                            DeleteDirectory(newTargetPath);
                        }
                        else
                        {
                            var newLastTargetPath = m_IStorage.Combine(m_IStorage.Combine(lastTargetPath, m_IStorage.GetFileName(item.WatchPath)), item.Name);
                            MoveDirectory(newTargetPath, newLastTargetPath);
                        }
                    }
                    else
                    {
                        m_Logger.Writeln($"**Delete Directory, Can't delete - directory not found {newTargetPath}");
                    }
                }
                else if (bFolder == false)
                {
                    if (m_IStorage.FileExists(newTargetPath))
                    {
                        if (lastTargetPath == null)
                        {
                            DeleteFile(newTargetPath);
                        }
                        else
                        {
                            var newLastTargetPath = m_IStorage.Combine(m_IStorage.Combine(lastTargetPath, m_IStorage.GetFileName(item.WatchPath)), item.Name);
                            MoveFile(newTargetPath, newLastTargetPath, true);
                        }
                    }
                    else
                    {
                        m_Logger.Writeln($"**Delete File, Can't delete - file not found {newTargetPath}");
                    }
                }
                break;
            }

            case WatcherChangeTypes.Renamed:
            {
                bool?bFolder = CheckItemTypeFolderOrFile(item.FullPath, item.ChangeType);
                if (bFolder != null)
                {
                    var newTargetPath = m_IStorage.Combine(m_IStorage.Combine(targetPath, m_IStorage.GetFileName(item.WatchPath)), item.Name);
                    var oldTargetPath = m_IStorage.Combine(m_IStorage.GetDirectoryName(newTargetPath), m_IStorage.GetFileName(item.OldPath));

                    if (bFolder == true)
                    {
                        if (m_IStorage.DirectoryExists(oldTargetPath))
                        {
                            if (!m_IStorage.DirectoryExists(newTargetPath))
                            {
                                if (lastTargetPath == null)
                                {
                                    MoveDirectory(oldTargetPath, newTargetPath);
                                }
                                else
                                {         //TODO!!!!!!!
                                    //CopyDirectory(oldTargetPath, newLastTargetPath);
                                    var newLastTargetPath = m_IStorage.Combine(m_IStorage.Combine(lastTargetPath, m_IStorage.GetFileName(item.WatchPath)), m_IStorage.GetFileName(item.Name));
                                    //CopyDirectory(oldTargetPath, newLastTargetPath);

                                    MoveDirectory(oldTargetPath, newTargetPath);
                                }
                            }
                            else
                            {
                                m_Logger.Writeln($"**Rename Directory, Can't rename - directory already exists {newTargetPath}");
                            }
                        }
                        else
                        {
                            m_Logger.Writeln($"**Rename Directory, Can't rename - Directory not found in backup folder {oldTargetPath}");
                        }
                    }
                    else if (m_IStorage.FileExists(oldTargetPath))
                    {
                        if (!m_IStorage.FileExists(newTargetPath))
                        {
                            if (lastTargetPath != null)
                            {
                                var newLastTargetPath = m_IStorage.Combine(m_IStorage.Combine(lastTargetPath, m_IStorage.GetFileName(item.WatchPath)), m_IStorage.GetFileName(item.OldPath));
                                CopyRenamedFile(oldTargetPath, newLastTargetPath, true);
                            }
                            else
                            {
                                MoveFile(oldTargetPath, newTargetPath);
                            }
                        }
                        else
                        {
                            m_Logger.Writeln($"**Rename File, Can't rename - file already exists {newTargetPath}");
                        }
                    }
                    else
                    {
                        m_Logger.Writeln($"**Rename file, Can't rename - file not found in backup folder {oldTargetPath}");
                    }
                }

                break;
            }

            default:
                break;
            }
        }