コード例 #1
0
        public static void Synchronize(IFileStore store, FileSupportEventArgs e)
        {
            // Если не известно имя файла, выходим.
              if (string.IsNullOrEmpty(e.ActualFileName) && string.IsNullOrEmpty(e.OldFileName))
            return;

              // Формируем путь к файлу в хранилище с учетом устанавливаемой директории.
              // Если имя файла не известно, оно не должно использоваться ниже.
              string actualRelativePath = e.ActualFileName != null ? Path.Combine(e.ActualDirectory ?? "", e.ActualFileName) : null;
              string oldRelativePath = e.OldFileName != null ? Path.Combine(e.OldDirectory ?? "", e.OldFileName) : null;

              // За один вызов может измениться либо имя файла, либо директория.

              // Новый файл.
              // Если в "сырых данных" указано имя файла с полным путем и старое имя пустое, то значит это новый файл.
              if (Path.IsPathRooted(e.RawFileName) && string.IsNullOrEmpty(e.OldFileName) && File.Exists(e.RawFileName))
              {
            store.AddFile(e.RawFileName, actualRelativePath);
              }
              // Удаление файла.
              // Если актуальное имя пустое, а старое есть в хранилище, удалим файл.
              else if (string.IsNullOrEmpty(e.ActualFileName) && store.Files.Contains(oldRelativePath))
              {
            store.DeleteFile(oldRelativePath);
              }
              // Переименование файла.
              else if (!string.IsNullOrEmpty(e.ActualFileName) && !string.IsNullOrEmpty(e.OldFileName)
            && e.ActualFileName != e.OldFileName && e.ActualFileName == e.RawFileName)
              {
            store.MoveFile(oldRelativePath, actualRelativePath);
              }
              // Перемещение файла в другой каталог.
              else if (e.ActualFileName == e.OldFileName && e.ActualDirectory != e.OldDirectory && e.ActualFileName == e.RawFileName)
              {
            store.MoveFile(oldRelativePath, actualRelativePath);
              }
              // Замена на файл с тем же именем.
              else if (Path.IsPathRooted(e.RawFileName) && !string.IsNullOrEmpty(e.OldFileName) && !string.IsNullOrEmpty(e.ActualFileName)
            && e.ActualDirectory == e.OldDirectory && File.Exists(e.RawFileName))
              {
            #warning Если ввести несуществующий файл, потом заменить на существующий, то файла не будет в хранилище, не заменится.
            // Заменяем файл, имя остается тем же.
            store.ReplaceFile(oldRelativePath, e.RawFileName);
            // Меняем имя файла.
            store.MoveFile(oldRelativePath, actualRelativePath);
              }
        }