重命名文件错误?

时间:2010-09-02 14:14:29

标签: elisp

我有一个使用pdftk压缩我的pdf文件的功能:

(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 个答案:

答案 0 :(得分:3)

与使用仅生成进程的'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的调用将在完成此过程后完成(压缩完成)。