您能告诉我如何在powerbuilder运行命令中使用“pdftk mypdf.pdf dump data | findstr NumberOfPages”并使用以下代码将此元数据保存在文件中:
string ls_runinput, ls_outputfile
ls_outputfile = "c:\test.txt"
ls_runinput = "c:\pdftk\pdftk.exe mypdf.pdf dump_data | findstr NumberOfPages >"+ls_outputfile
Run(ls_runinput,Minimized!)
li_fileopen = FileOpen(ls_outputfile ,TextMode!, Read!, Shared!)
问题是执行了Run命令,创建了文件,但fileopen返回-1? 可能是运行无法识别“|”字符? 你应该建议我写出正确的代码? 我使用powerbuilder 10.5.2,非常感谢提前
答案 0 :(得分:3)
Powerbuilder不会等待Run()
调用的进程完成。 Run()
的返回值完全取决于它是否成功调用了外部进程,而不是外部进程接下来做了什么。
这意味着pdftk很可能已正确完成,但您尝试过早访问输出。完成后你必须找到一些解决方法。也许从批处理文件中调用它,在完成之前创建另一个文件,然后在Powerbuilder中检查该文件是否存在。
或者,您可以使用其他方法调用外部进程。这是通过Windows Scripting Host调用外部进程的示例:
OleObject wsh
CONSTANT integer MAXIMIZED = 3
CONSTANT integer MINIMIZED = 2
CONSTANT integer NORMAL = 1
CONSTANT integer HIDE = 0
CONSTANT boolean WAIT = TRUE
CONSTANT boolean NOWAIT = FALSE
wsh = CREATE OleObject
li_rc = wsh.ConnectToNewObject( "WScript.Shell" )
li_rc = wsh.Run(ls_runinput, HIDE, TRUE)
(代码示例来自Stuart Dalby's site)。
如果仍然无法使其正常工作,最好将其拆分,并验证您是否可以先对预先存在的文件执行FileOpen
,然后从外部验证该进程的输出由Run()
调用是正确的(最终)。
仅供参考,|
字符不是特殊字符,不需要在字符串中转义。
答案 1 :(得分:1)
罗兰史密斯有一个图书馆和他在网站上做“跑步与等待”的例子可以做你需要的事情:
http://www.topwizprogramming.com/freecode_runandwait.html
还有其他类似的东西(我们从某个地方获得了一个名为uo_syncproc的对象,它使用各种windows函数来执行此操作(CreateProcessA,WaitForSingleObject,CloseHandle)。