Nano Hash - криптовалюты, майнинг, программирование

Как скопировать файлы с одного диска в другое место с той же структурой папок?

Я хочу сделать точную копию некоторых файлов, каталогов и подкаталогов на моем USB-накопителе I:/ и хочу, чтобы они находились в C:/backup (например)

Мой USB-накопитель имеет следующую структуру:

(для примера, на моем диске больше файлов, каталогов и подкаталогов)

  • курсы/data_structures/db.sql

  • игры/компьютер/pc-game.exe

  • экзамены/exam01.doc


Что ж, я не уверен, с чего начать, но моя первая идея — заставить все files делать это:

string[] files = Directory.GetFiles("I:");

Следующим шагом может быть создание цикла и использование File.Copy для указания пути назначения:

string destinationPath = @"C:/backup";

foreach (string file in files)
{
  File.Copy(file, destinationPath + "\\" + Path.GetFileName(file), true);
}

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

  • Первый возникает из-за того, что конфигурация моего ПК показывает скрытые файлы для каждой папки, а на моем USB-накопителе есть AUTORUN.INF скрытый файл, который больше не скрыт, и цикл пытается скопировать его и в процессе генерирует это исключение:

Доступ к пути «AUTORUN.INF» запрещен.

  • Второй происходит, когда некоторые пути слишком длинные, и это генерирует следующее исключение:

Указанный путь, имя файла или оба слишком длинные. Полное имя файла должно быть меньше 260 символов, а имя каталога должно быть меньше 248 символов.


Итак, я не уверен, как этого добиться и проверить каждый возможный случай ошибки. Я хотел бы знать, есть ли другой способ сделать это и как (может быть, какая-то библиотека) или что-то более простое, например, реализованный метод со следующей структурой:

File.CopyDrive(driveLetter, destinationFolder)

(ответы VB.NET также принимаются).

Заранее спасибо.

13.09.2012

Ответы:


1
public static void Copy(string src, string dest)
{
    // copy all files
    foreach (string file in Directory.GetFiles(src))
    {
        try
        {
            File.Copy(file, Path.Combine(dest, Path.GetFileName(file)));
        }
        catch (PathTooLongException)
        {
        }
        // catch any other exception that you want.
        // List of possible exceptions here: http://msdn.microsoft.com/en-us/library/c6cfw35a.aspx
    }

    // go recursive on directories
    foreach (string dir in Directory.GetDirectories(src))
    {

        // First create directory...
        // Instead of new DirectoryInfo(dir).Name, you can use any other way to get the dir name,
        // but not Path.GetDirectoryName, since it returns full dir name.
        string destSubDir = Path.Combine(dest, new DirectoryInfo(dir).Name);
        Directory.CreateDirectory(destSubDir);
        // and then go recursive
        Copy(dir, destSubDir);
    }
}

И тогда вы можете назвать это:

Copy(@"I:\", @"C:\Backup");

У меня не было времени проверить это, но я надеюсь, что вы поняли идею...

редактировать: в приведенном выше коде нет таких проверок, как Directory.Exists и тому подобное, вы можете добавить их, если какая-либо структура каталогов существует по пути назначения. И если вы пытаетесь создать какое-то простое приложение для синхронизации, то это становится немного сложнее, так как вам нужно удалить или выполнить другие действия с файлами/папками, которых больше не существует.

13.09.2012

2

Обычно это начинается с парсера рекурсивного спуска. Вот хороший пример: http://msdn.microsoft.com/en-us/library/bb762914.aspx

13.09.2012

3

Возможно, вы захотите изучить перегруженный класс CopyDirectory.

CopyDirectory(String, String, UIOption, UICancelOption)

Он будет проходить через все подкаталоги.

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

Просто напишите мне.

13.09.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..