Захват файла Java и Windows - блокировка не являются “абсолютными”?

Запустите с Подрывной деятельности. документация онлайн , и Прагматически настроенные Программисты, книга Svn является замечательной.

, Если Вы находитесь в Windows, можно также добраться TortoiseSvn (свободный) для интеграции проводника или VisualSvn (коммерческий) для интеграции Visual Studio. Для Mac Версии похожи на хороший одинокий клиент, и XCode 3 имеет svn встроенную интеграцию. Тем не менее я провел бы немного времени в командной строке с помощью svn клиента для реального выяснения то, что Вы делаете.

После получения довольного путем svn работы, тогда можно войти в распределенные системы управления версиями как Мерзавец, Базар, или Подвижный, но я видел, что у достаточного количества профессиональных разработчиков есть проблемы при обертывании их голов вокруг основ управления версиями (переходящий, объединяясь и т.д.), что я стал бы довольным этим сначала прежде, чем переместиться в распределенные системы.

Остаются ад далеко от Visual SourceSafe (VSS). Это - корма. Ваш код не безопасен. См. эти много ссылок относительно того, почему не использовать VSS.

6
задан Touko 27 August 2009 в 06:58
поделиться

2 ответа

Хитрость, сам FileLock API не обещает ничего особенного:

Этот API блокировки файлов предназначен для сопоставить непосредственно с родной блокировкой объект базовой операционной система. Таким образом, блокировка файла должны быть видны всем программам, которые иметь доступ к файлу независимо от язык, на котором эти программы записаны.

Действительно ли блокировка не позволяет другой программе доступ к содержимому заблокированного регион зависит от системы и поэтому не указано. Родной средства блокировки файлов некоторых системы носят рекомендательный характер, то есть что программы должны совместно соблюдать известный протокол блокировки в чтобы гарантировать целостность данных. На собственные блокировки файлов других систем обязательно, что означает, что если одна программа блокирует область файла, а затем другую программы фактически не могут доступ к этому региону таким образом, чтобы нарушит замок. Еще на другом системы, есть ли собственные блокировки файлов рекомендательный или обязательный настраивается для каждого файла. Для обеспечения последовательное и правильное поведение платформы, настоятельно рекомендуется чтобы блокировки, предоставляемые этим API, были used as if they were advisory locks.

Oddly enough, the discussion about the file locking API when it was under development claimed that Windows OS provided mandatory locking and on Unix only advisory locking. So on that reading one might expect your code to work just fine on Windows.

I wonder if what is happening it that your editor is not so much modifying the file as creating a temporary file and then manipulating directory entries in order to replce the version of the file you have locked with a new version. Would Windows allow such behaviour?

I wonder if you'll need to resort to JNI in order to get the level of control you need.

5
ответ дан 17 December 2019 в 02:31
поделиться

Ваш вызов .tryLock () может вернуть null, если он не получит блокировку. Из документации Javadoc:

Объект блокировки, представляющий вновь полученную блокировку, или null, если блокировка не может быть получена, потому что другая программа удерживает перекрывающуюся блокировку

Кроме того, ваш код в настоящее время открывает файл , а затем он пытается получить блокировку. Вместо этого вы должны выполнить цикл, пытаясь получить блокировку, и как только она у вас есть, откройте файл, прочитайте файл, закройте файл, а затем снимите блокировку. И откажитесь от блокировки в предложении finally {} на тот случай, если ваш код вызовет исключение с удерживаемой блокировкой. (Вам когда-нибудь приходилось перезагружать компьютер с Windows только потому, что какой-то файл был заблокирован?)

1
ответ дан 17 December 2019 в 02:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: