
Представьте себе большую сеть SAN с сотней тысяч файлов в неорганизованной структуре каталогов.
Файлы будут перемещены в новый SAN с организованной структурой каталогов. Некоторые файлы будут переименованы при перемещении. Также многие файлы имеют ссылки, например, таблицы Excel связаны между собой, и они сломаются после перемещения.
Нам необходимо сохранить карту путей к файлам «Откуда» и «Докуда» на случай, если нам понадобится обратиться к архиву, например, чтобы исправить неработающую ссылку.
Я провел исследование, чтобы узнать, есть ли что-нибудь на рынке, но безуспешно. Поэтому я начал писать приложение, которое позволяет пользователям перетаскивать файлы и записи в базу данных SQL:
Я не уверен на 100% в этом подходе. Кто-нибудь знает, есть ли лучший способ сделать это? Есть ли что-нибудь в Windows?
Мы думали о сканировании старых и новых каталогов и создании карты таким образом. К сожалению, это не сработает, так как имя файла может измениться, а даты создания/изменения и т. д. будут сегодняшними для перемещенных файлов.
Мы думали о том, чтобы в каждом файле был уникальный идентификатор, но эта идея так и не получила поддержки, поскольку где бы вы хранили уникальный идентификатор для разных типов файлов?
Возможно, скрипт AutoHotKey?
решение1
Я создал автоматизированную систему развертывания на C# для одного из моих клиентов. Эта проблема выглядит похожей, за исключением масштаба.
Вещи, которые были учтены в ADS:
- Автоматическая выписка из SVN.
- Просмотрите все папки.
- Каждая папка может быть включена или исключена из развертывания.
- Если папка включена, то все файлы и подпапки также включены. То же самое касается исключения.
- Как и при включении, каждую папку можно переместить в новое место в папке развертывания.
- Все делалось методом перетаскивания (к счастью, сценарии развертывания не приходится изменять так часто).
- Самой важной частью было сравнение двоичных файлов для копирования только измененных файлов. <-- Похоже, это самое важное и для вас. Поскольку я имел дело только с файлами кода, такими как файлы кода C# или perl, это была простая проверка:
- Возьмите файлы слева и справа
- Удалите все пробелы.
- Сравнивайте файлы по одному байту за раз.
В вашем случае, если только файлы не слишком большие, вы можете использовать тот же подход. Если файлы большие (предполагая, что это файлы данных), простое сравнение заголовков и нижних колонтитулов должно сработать.
Мы думали о том, чтобы в каждом файле был уникальный идентификатор, но эта идея так и не получила поддержки, поскольку где бы вы хранили уникальный идентификатор для разных типов файлов?
Это то, с чего я тоже начинал, но моя проблема не была настолько серьезной, поэтому я отказался от этого. Технически, каждый объект FileInfo был обернут в специализированный класс, который имел определенное поле типа GUID. Я сохранял этот массив сериализованных классов в XML-файлах.
<FIItem>
<ID>*some guid*</ID>
<FileInfoObj>*file info which contains full file path*</FileInfoObj>
</FIItem>