Что лучший способ состоит в том, чтобы сделать межплатформенную, атомарную замену файла в Perl?

Вы можете сделать следующее:

(mapA.keys + mapB.keys).associateWith {
    setOf(mapA[it], mapB[it]).filterNotNull().joinToString()
}
  1. поместить все ключи в набор
  2. итерировать по этому набору и связать каждый элемент с набором значений
  3. удалить нулевые значения из набора значений.
  4. объединить элементы в списке значений, используя joinToString().
8
задан brian d foy 25 December 2008 в 00:15
поделиться

3 ответа

Ваш метод кажется очень хорошо. Это быстро, это является атомарным, это использует базовые модули только, и File::Temp является безопасным способом иметь дело с временными файлами.Что еще нужно?

10
ответ дан 5 December 2019 в 10:44
поделиться

Я сделал бы это тот же способ, которым Вы делаете его. По крайней мере, на Ose типа Unix, файл переименовывает, как, гарантируют, будет атомарным, таким образом, у Вас не будет моментов, где или оригинал или новые файлы не там.

6
ответ дан 5 December 2019 в 10:44
поделиться

Переименуйте достаточно. Однако:

Подвержен риску Ваш временный файл условий состязания? Имя файла должно быть рандомизировано так, никто не может вызвать проблемы путем вставки их собственного файла. Используйте интерфейс для mkstemp (), если это возможно.

0
ответ дан 5 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

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