重命名文件错误?

问题描述:

我有一个函数使用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,虽然很清楚,这两个文件都存在。之后我可以单独评估重命名文件,并且工作正常。也许它试图在实际创建之前重命名~文件?在那种情况下,我怎么才能让它等到整个过程结束? (并可能检查错误?)

而不是使用'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的通话将结束(压缩完成)。

+0

啊,所以我可以使用临时缓冲区来检查错误 - 太棒了! – hatmatrix 2010-09-03 00:19:22