public virtual void Save(string path)
 {
     State = FileStoreState.Saved;
 }
 public void ReplaceFile(string relativePath, string path)
 {
     // Файл должен физически существовать и быть в коллекции.
       if (FileWorker.Exists(path) && FileWorker.Exists(ConvertToTempPath(relativePath)) && files.FirstOrDefault(v => v == relativePath) != null)
       {
     // Не дадим заменить самого себя.
     if (path != ConvertToTempPath(relativePath))
     {
       FileWorker.Copy(path, ConvertToTempPath(relativePath), true);
       State = FileStoreState.Changed;
     }
       }
 }
        public void DeleteFile(string relativePath)
        {
            // Файл должен физически существовать и быть в коллекции.
              if (FileWorker.Exists(ConvertToTempPath(relativePath)) && files.FirstOrDefault(v => v == relativePath) != null)
              {
            files.Remove(relativePath);
            FileWorker.Delete(ConvertToTempPath(relativePath));

            // Удаляем директорию, если она пустая.
            DeleteDirectoryIfEmpty(Path.GetDirectoryName(relativePath));

            State = FileStoreState.Changed;
              }
        }
        public void MoveFile(string oldRelativePath, string newRelativePath)
        {
            string oldPath = ConvertToTempPath(oldRelativePath);
              string newPath = ConvertToTempPath(newRelativePath);
              if (FileWorker.Exists(oldPath) && files.FirstOrDefault(v => v == oldRelativePath) != null
            && files.FirstOrDefault(v => v == newRelativePath) == null)
              {
            CheckAndCreateDirectory(newRelativePath);
            FileWorker.Move(oldPath, newPath);
            DeleteDirectoryIfEmpty(Path.GetDirectoryName(oldRelativePath));

            files.Remove(oldRelativePath);
            files.Add(newRelativePath);

            State = FileStoreState.Changed;
              }
        }
        public void AddFile(string path, string relativePath)
        {
            // Файл должен физически существовать и не быть в коллекции.
              if (FileWorker.Exists(path) && files.FirstOrDefault(v => v == relativePath) == null)
              {
            CheckAndCreateDirectory(relativePath);

            files.Add(relativePath);
            // Обрабатываем ситуацию, когда пользователь сам создал файл в хранилище
            // и теперь его добавляет. В этом случае добавления в коллекцию достаточно,
            // файл не копируем.
            if (path != ConvertToTempPath(relativePath))
              FileWorker.Copy(path, ConvertToTempPath(relativePath));
            State = FileStoreState.Changed;
              }
        }