2010-09-02 143 views
3

我有一個函數使用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,雖然很清楚,這兩個文件都存在。之後我可以單獨評估重命名文件,並且工作正常。也許它試圖在實際創建之前重命名~文件?在那種情況下,我怎麼才能讓它等到整個過程結束? (並可能檢查錯誤?)

回答

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的通話將結束(壓縮完成)。

+0

啊,所以我可以使用臨時緩衝區來檢查錯誤 - 太棒了! – hatmatrix 2010-09-03 00:19:22