重命名文件错误?
问题描述:
我有一个函数使用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
的通话将结束(压缩完成)。
啊,所以我可以使用临时缓冲区来检查错误 - 太棒了! – hatmatrix 2010-09-03 00:19:22