2012-03-15 5 views
6

В настоящее время я создаю приложение для резервного копирования, где нам нужен способ чтения файлов, которые используются другими приложениями, и мы также хотим минимизировать блокировку, которую мы берем на файлы пользователей. Использование службы теневого копирования тонов Окна, похоже, является идеальным способом для достижения этого.Том теневой копии с использованием Java

Наша проблема однако заключается в том, что мы используем Java. Есть ли какой-либо простой способ реализовать это в любом случае (либо с использованием какой-либо библиотеки, либо, возможно, даже с CLI)?

+1

Это просто мнение, но то, что вы пытаетесь сделать, - это работа для «родного» языка, такого как C++. Это огромная проблема, связанная с подключением к ОС API с Java, и она медленна. – Jochen

+1

[JNI is'nt slow] (http://stackoverflow.com/a/7809300/351861) - и если это действительно для вас ... ну ... у вас, скорее всего, есть серьезные ошибки программирования в вашем коде. Его также нет * «hassle» * для написания родных библиотек для JNI **, но ** его довольно .... неудобно - если вы никогда не писали C/C++, у вас, скорее всего, будет много чему поучиться и несколько вещей, чтобы рассмотреть но это именно так - theres также [JNA] (https://en.wikipedia.org/wiki/Java_Native_Access), что делает его немного проще и меньше * «hassle» * – specializt

ответ

2

Итак, я ничего не знаю о VSS, но с точки зрения доступа к родным API-интерфейсам Windows с Java, я бы посмотрел JNA. Вы вполне можете найти, что кто-то уже портировал соответствующие определения API в JNA.

+1

Любые указатели на определения JNA? – CAFxX

1

Хм ... делать это с помощью Java может быть сложным и очень подвержен ошибкам

Один простой способ сделать это состоит в написании небольшой родной DLL, который делает то, что вы хотите VSS сделать с помощью VSS API,

И затем, используя либо C# pInvoke, либо C++/CLI ..., а затем вы можете использовать любой другой язык, совместимый с CLI.

7

Я сделал это раньше.

Самый простой способ, которым мы выяснили, было построить 4 версии vshadow.exe (демо-инструмент для быстрого старта с VSS с сайта Microsoft): один для каждого целевого plaform в XP/более поздней версии и x86/x64. VShadow в основном позволяют создать или уничтожить снимок и получить путь, который выглядит как:

\\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyXX, которые вы можете использовать, чтобы заменить букву диска (D:, например), который работает с JAVA File API. Версия VShadow из VSS SDK считывается и записывается, это не та же самая версия, что и exe, которую вы можете скачать напрямую, только для чтения.

Затем на Java легко написать две обертки CLI с унифицированным интерфейсом (для обработки двух разных действий VShadow между XP и более поздними версиями).

Удачи.

Смежные вопросы