線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1767
推到 Plurk!
推到 Facebook!

CreateProcess無法將結果重新導向至檔案

缺席
wei0510
一般會員


發表:9
回覆:2
積分:2
註冊:2009-05-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-13 15:40:53 IP:203.67.xxx.xxx 訂閱
大家好,我使用了CreateProcess API來呼叫一支別人寫的console應用程式,並且希望能將其輸出運用導向符號">>"導向至檔案,但該程式有許多的參數,且參數多為檔案路徑,此時CreateProcess所開啟的CMD.exe就會顯示"檔案名稱、目錄名稱或磁碟區標籤語法錯誤"。

這是我的程式碼片段:

String Command, FilePath1 , FilePath2 , TempPath;

Command = "CMD.exe /k " FilePath1 " " FilePath2 " \>> " TempPath;

CreateProcess( NULL,Command.t_str(),NULL,NULL,false,0,NULL,NULL,&StartupInfo,&ProcessInfo);

其中FilePath1、FilePath2 、TempPath都有經過GetShortPathName() API轉換為短檔名了,且於路徑前後都再加上雙引號以預防萬一。

另外我嘗試過去除重新導向至檔案的片段,將其變更為:

String Command, FilePath1 , FilePath2;

Command = "CMD.exe /k " FilePath1 " " FilePath2 ;

CreateProcess( NULL,Command.t_str(),NULL,NULL,false,0,NULL,NULL,&StartupInfo,&ProcessInfo);

這樣是可以執行的,以釐清問題不是出在長短檔名轉換及檔案路徑不正確這兩點。

另外我也試過直接開啟CMD.exe,用手動的方式輸入Command並且執行,是能正確的將其結果導向至指定檔案。

搜尋後發現版上其實有幾篇與這類似的問題,但大多沒有比較完整的結論,回文內的各種方式我也都有試著使用看看,但都沒有效果,所以想再問一次,看看這段時間內是否有人已經找出這個問題的原因了。
編輯記錄
wei0510 重新編輯於 2009-08-13 15:43:19, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-17 12:33:11 IP:163.28.xxx.xxx 訂閱
可以使用 pipe方式, 
參考函式,CreatePipe, PeekNamedPipe,
------
FPGA驗證, FPGA開發平台, http://smims.com
wei0510
一般會員


發表:9
回覆:2
積分:2
註冊:2009-05-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-08-18 11:44:29 IP:203.67.xxx.xxx 訂閱
目前我已經改用PIPE的方式實現功能了,只是很好奇檔向至檔案失敗的原因。
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-08-18 11:54:13 IP:122.116.xxx.xxx 訂閱
可以分享你的方式讓之後有需要的人參考嗎?
系統時間:2017-10-18 6:30:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!