甘蔗夫
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:76 回覆:19 積分:19 註冊:2004-08-25
發送簡訊給我
|
Dear 大大:
我使用shellEexcute去呼叫"xcopy" command,當我執行的path是在諸如Document and Setting(長檔名)下時, 每次都會有問題,因此我就使用getshortpathneame此API將長檔名變為短檔名再將其交給SHELLEXECUTE帶入"xcopy"的參數,但每次執行雖能複製成功,但"xcopy" 好像會一直hold在memory上,這該怎樣解決,然而在其他沒長檔名的路徑都非常正常
|
Stallion
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:52 回覆:1600 積分:1995 註冊:2004-09-15
發送簡訊給我
|
當路徑名稱中間有空白字元時,用雙引號括起來~
|
甘蔗夫
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:76 回覆:19 積分:19 註冊:2004-08-25
發送簡訊給我
|
引言:
當路徑名稱中間有空白字元時,用雙引號括起來~
>>< face="Verdana, Arial, Helvetica"> 我試過了,如果將其由shellexecute帶入xcopy,遇到有空白字元(如program files和document and setting)會有問題
|
RedSnow
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
甘蔗夫 您好: 參數內含有空白字元,除了要使用雙引號括起來之外,雙引號本身也是參數的一部份,因此參數的雙引號以及目錄分隔字元都要再加上一個反斜線,我不知道您實際是如何設定的,以下是以前面的例子來說明:
"Xcopy \"c:\\program files\\Zip\\*.zip\" c:"
7 天天敲鍵盤 v 時時按滑鼠 8
|
Stallion
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:52 回覆:1600 積分:1995 註冊:2004-09-15
發送簡訊給我
|
我試了一下,要括號成這樣才可以! ![]()
< class="code">
AnsiString temp = "\"C:\\Program Files\\Winzip\\*.*\" C:\\Temp";
::ShellExecute(NULL,"open","XCopy.exe",temp.c_str() ,NULL,SW_SHOWNORMAL);
-----------------------
Practice makes perfect.
|
甘蔗夫
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:76 回覆:19 積分:19 註冊:2004-08-25
發送簡訊給我
|
引言:
我試了一下,要括號成這樣才可以!
< class="code">
AnsiString temp = "\"C:\\Program Files\\Winzip\\*.*\" C:\\Temp";
::ShellExecute(NULL,"open","XCopy.exe",temp.c_str() ,NULL,SW_SHOWNORMAL);
-----------------------
Practice makes perfect.
可否請妳試試
AnsiString temp = "/Y \"C:\\Program Files\\Winzip\\a.txt \\\\192.1.1.2\\c$\\Program Files\\Winzip\\\""
::ShellExecute(NULL,"open","XCopy.exe",temp.c_str() ,NULL,SW_SHOWNORMAL);
我的情形是要透過shellexecute把參數帶給"xcopy"command把一個檔案複制到另一個pc的相同目錄(我的環境設定已經可以這樣做),只是遇到有空字元的路徑都會有問題,所以我使用getshortpathname此api將長檔名轉為短檔名,執行結果雖有複製成功但發現"xcopy"command都會hold在memory,使得電腦好像當機,而且在執行xcopy之前如果目地pc之目的folder沒有先自行create(因為"xcopy"command會自行幫目的pc來create)在執行"xcopy"之後會變成轉為短檔名的名子而跟來源目錄不相同
TStringList *Path = new TStringList;
char *AbsolutePath= new char[255];
char *filename= new char[255];
GetShortPathName(.......,AbsolutePath,255);
GetShortPathName(.......,filename,255);
AnsiString PathName;
PathName=StringReplace(AbsolutePath,":"," ", TReplaceFlags()<CommaText=PathName;
Argu="/Y/E " String(AbsolutePath) String(filename) " " "\\\\192.1.1.1\\" Path->Strings[0] "$" APath->Strings[1];
ShellExecute(NULL,NULL,"xcopy",Argu.c_str(),NULL,SW_SHOWNOACTIVATE); (Path->Strings[0]="c",Path->Strings[1]為不加磁碟代號的目的路徑) 發表人 - 甘蔗夫 於 2005/11/21 00:14:14
|