Транзакционная файловая система для Delphi?

#delphi #transactions #io

#delphi #транзакции #io

Вопрос:

Существует ли какая-либо известная вам реализация транзакционной файловой системы для Delphi? Она должна работать, по крайней мере, в Windows XP и выше (и, следовательно, не использовать новые функции TxF). Это должно позволять выполнять несколько файловых операций (удалять, перемещать, копировать, переименовывать) в качестве транзакции, а также обеспечивать восстановление.

Спасибо!

Комментарии:

1. От чего вы защищаете? Кроме того, вы говорите об использовании файла-контейнера или просто выполняете транзакционные операции в «обычной» файловой системе? Потому что вы не собираетесь на самом деле делать последнее, если сама FS не поддерживает транзакции. Вы можете подделать это во многих случаях, но вам, вероятно, придется написать всю вспомогательную структуру самостоятельно. Даже с контейнером вам все равно придется иметь дело с семантикой базовой FS.

2. @afrazier: Последнее: транзакционные операции в обычной файловой системе. Например: если скопировано 100 файлов, а 87-й завершается ошибкой, первые 86 уже скопированных файлов должны быть удалены.

3. Как транзакционная файловая система может быть реализована «для Delphi»? Если вам нужно использовать ее в операционной системе, то она должна быть реализована для операционной системы. Если вы хотите использовать ее только из приложения, используйте базу данных — они обеспечивают поддержку транзакций.

4. @gabr: Я хочу использовать это из своего приложения, и я знаю, что базы данных предлагают транзакции ACID, но это не было вопросом, и в данном случае это невозможно. Мне нужно выполнять файловые операции, и я хочу максимально приблизиться к ACID. кстати: существуют реализации .NET и Java, которые решают эту проблему, например: onjava.com/pub/a/onjava/2001/11/07/atomic.html Просто хотел спросить, есть ли что-нибудь доступное в мире Delphi.

5. @Smasher: Тогда вам действительно нужна поддержка от базовой файловой системы. Вы можете «подделать это», внеся изменения в копии оригиналов и поменяв местами имена, но для этого ваше приложение должно быть спроектировано таким образом, чтобы работать таким образом.

Ответ №1:

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

Коммерческий маршрут: есть несколько пакетов компонентов (за отдельную плату), которые также имеют собственные драйверы Windows. Что происходит, так это то, что пользователи «видят» файлы на своем жестком диске так, как они привыкли, но на самом деле вы сохраняете их в составном файле. Я полагаю, что в некоторых из них даже есть своего рода «история файлов», чтобы вы могли вернуться назад во времени, но я не уверен насчет этого.

Андреа

Ответ №2:

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

Комментарии:

1. Спасибо за ответ, но, к сожалению, в данном случае это не вариант. Файлы, с которыми мне приходится работать, существуют, и я не могу изменить способ их хранения.