как предупредить пользователя о дублировании в процессе перемещения файла в веб-приложении - PullRequest
0 голосов
/ 10 октября 2018

У меня есть исходный и целевой путь с одинаковыми именами папок и файлов (в источнике есть несколько дополнительных файлов).у меня вопрос, когда я вырезал исходные местоположения файлов и папок и вставил место назначения

  1. как скопировать изначально дополнительные файлы (место назначения не имеет файлов)?
  2. как пройтисообщение об ошибке после вставки дополнительных файлов «папка и файлы уже существуют, вы хотите заменить ее» сообщение?
  3. после получения ответа, как я могу переместить и удалить исходные файлы?

кто-нибудь может помочь мне, ребята, я застрял с этой логикой почти 2 дня.

Примечание: я новичок в коде на стороне сервера C #.

спасибо, заранее.Привет всем, спасибо за ваш ответ, я написал ту же структуру с #RezaNoei упомянул мой код был

private void DirectoryCopy(string sourceDirName, string destDirName, bool replace, string action)
    {
        try
        {
            // Gets the subdirectories for the specified directory.
            var dir = new DirectoryInfo(sourceDirName);

            var dirs = dir.GetDirectories();
            // If the destination directory doesn't exist, creates it.
            if (!Directory.Exists(destDirName))
            {
                Directory.CreateDirectory(destDirName);
            }

            // Gets the files in the directory and copy them to the new location.
            var files = dir.GetFiles();
            foreach (var file in files)
            {
                var oldPath = Path.Combine(sourceDirName, file.Name);
                var temppath = Path.Combine(destDirName, file.Name);
                var fileExist = File.Exists(temppath);
                if (!fileExist)
                {
                    if (action != "paste")
                    {
                        file.CopyTo(temppath, true);
                    }
                    else
                    {
                        File.Move(oldPath, temppath);
                    }
                }
                else if (fileExist && replace)
                {
                    File.Delete(temppath);
                    if (action != "paste")
                    {
                        file.CopyTo(temppath, true);
                    }
                    else
                    {
                        File.Move(oldPath, temppath);
                    }
                }
            }
            if (action == "paste")
            {
                DeleteDirectory(sourceDirName);
            }
        }
        catch (Exception e)
        {
            throw e;
        }
    }

1 Ответ

0 голосов
/ 10 октября 2018

Используйте эту функцию:

Примечание: Если вы разрабатываете веб-приложение и хотите сообщить об этом через Html, оно вам не поможет.Пожалуйста, прочитайте следующий раздел «Для веб-приложений»
Примечание 2: эта функция не проверяет внутренние папки.поэтому, если у вас есть вложенный путь, мы должны написать рекурсивную функцию.

    public void Copy(string Source, string Destination)
    {
        string[] SourceFiles = System.IO.Directory.GetFiles(Source);
        for (int i = 0; i < SourceFiles.Length; i++)
        {
            string DestinationFilePath = System.IO.Path.Combine(Destination, System.IO.Path.GetFileName(SourceFiles[i]));
            if (System.IO.File.Exists(DestinationFilePath))
            {
                var DialogResult = MessageBox.Show($"File `{System.IO.Path.GetFileName(SourceFiles[i])}` Exists in the Destination. Are you want to overwrite this file ?", "File Exist !", MessageBoxButtons.YesNo);
                if (DialogResult == DialogResult.Yes)
                    System.IO.File.Copy(SourceFiles[i], DestinationFilePath, true);
            }
            else
            {
                System.IO.File.Copy(SourceFiles[i], DestinationFilePath);
            }
        }
    }

Для веб-приложения:

Вам действительно нужно взаимодействовать с пользователем.И это делает нашу работу более сложной, чем раньше.

Вы будете работать с сеансом, и вы должны отслеживать эту операцию.Я не знаю, какую технологию вы используете, но вы должны добавить ее в сеанс:

 1-1 **Destination Folder**
 1-2 **List of Duplicated SourceFiles** 

Итак:

  1. Следующим шагом является копирование не-дублированные файлы и добавленное дублирование в сеансе:

    public void Copy(string Source, string Destination)
    {
        /// Set Session ....
        Session["Destination"] = Destination;
    
        List<string> DuplicatedFiles = new List<string>();
    
        string[] SourceFiles = System.IO.Directory.GetFiles(Source);
        for (int i = 0; i < SourceFiles.Length; i++)
        {
            string DestinationFilePath = System.IO.Path.Combine(Destination, System.IO.Path.GetFileName(SourceFiles[i]));
    
            if (System.IO.File.Exists(DestinationFilePath))
            {
               // Add into Duplication List
               DuplicatedFiles.Add(SourceFiles[i]);
            }
            else
            {
                System.IO.File.Copy(SourceFiles[i], DestinationFilePath);
            }
        }
        /// Set Session .....
        Session["DouplicatedFiles"] = DuplicatedFiles;
    }
    

Код выше - псевдо, цель - Очистить.

Следующий шаг - показать результат копирования или дублирования:

Я не знаю, как вы хотите реализовать такое представление для ошибок дублирования, и оно не будет частью ответа,в любом случае вы можете позволить пользователю выбирать действие для каждого файлов отдельно или целых из них одновременно.

зависит от ваших предпочтений, которые у вас будутActionMethod (в MVC) или что-то еще в WebForm, которое будет выполнять следующие действия: (Если пользователь не хочет заменять файлы, действие легко забыть)

 public void CopyDuplications(bool Overwrite)
 {
    if (!Overwrite)
      return "OK";
    else 
    {
        string Destination = Session["Destination"] as string;
        var DuplicatedFiles = Session["DouplicatedFiles"] as List<string>();
        for (int i = 0; i< DuplicatedFiles.Count; i++) 
        {
            string DestinationFilePath = System.IO.Path.Combine(Destination, System.IO.Path.GetFileName(DuplicatedFiles[i]));

            System.IO.File.Copy(DuplicatedFiles[i], DestinationFilePath, true);
        }
    }  
 }   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...