ошибка переименования файла? - PullRequest
3 голосов
/ 02 сентября 2010

У меня есть функция для сжатия моего PDF-файла с использованием pdftk:

(defun compresspdf (filename)
  (interactive)
  (let ((tmpfile (concat filename "~")))
    (start-process-shell-command "pdftk" nil
    (format "pdftk %s cat output %s compress dont_ask"
        filename tmpfile))
    (rename-file tmpfile filename t)))

Сжимает файл и сохраняет его под тем же именем с добавлением ~.Однако в тот момент, когда он должен переименовать файл, он выдает ошибку: let: Renaming: No such file or directory, /pathtofile/mypdf.pdf~, /pathtofile/mypdf.pdf, хотя очевидно, что оба этих файла существуют.Я могу отдельно оценить переименование файла после этого, и он отлично работает.Может быть, он пытается переименовать файл ~ до его фактического создания?В таком случае, как я могу заставить его ждать, пока процесс не закончится?(и возможно проверить на ошибки?)

1 Ответ

3 голосов
/ 02 сентября 2010

В отличие от использования 'start-process-shell-command, который просто порождает процесс, поэтому переименование происходит до создания tmpfile. Попробуйте использовать 'shell-command, вот так:

(defun compresspdf (filename)
  (interactive)
  (let ((tmpfile (concat filename "~")))
    (with-temp-buffer 
      (shell-command (format "pdftk %s cat output %s compress dont_ask"
                             filename tmpfile)
                     (current-buffer)
                     (current-buffer)))
    (rename-file tmpfile filename t)))

Вызов 'shell-command завершится после завершения процесса (сжатие завершено).

...