全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2535
推到 Plurk!
推到 Facebook!

請問有關於 SHFileOperation 的錯誤

答題得分者是:deity
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-10 16:24:12 IP:211.21.xxx.xxx 未訂閱
我的程式如下,在相同的參數執行時,有時候正常工作 但有時候會出現『無法複製檔案 : 檔案系統錯誤(1026)』 這是怎麼一回事? void __fastcall MySaveFile(char *s, char *z){ SHFILEOPSTRUCT oFile; ZeroMemory(&oFile, sizeof(SHFILEOPSTRUCT)); oFile.lpszProgressTitle="檔案複製中..."; oFile.hwnd=Form1->Handle; oFile.wFunc=FO_COPY; oFile.pFrom=s;//s.c_str(); oFile.pTo=z;//z.c_str(); oFile.fFlags= FOF_FILESONLY; SHFileOperation(&oFile); } 無所不在
------
無所不在
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-10 21:32:32 IP:163.29.xxx.xxx 未訂閱
jtain您好: 請參考本站的連結http://delphi.ktop.com.tw/topic.php?topic_id=48506,站上還有更多,自己搜尋一下
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-10 23:25:16 IP:59.32.xxx.xxx 未訂閱
您好: 我想是因为oFile.pFrom 和 oFile.pTo 实际上是“多个null结束的字符串”,可以带多个文件名同时做。 比如: 'f1.txt'#0'f2.txt'#0'f3.txt'#0#0 可以同时做 f1.txt和f2.txt和f3.txt 3个文件, 最后要多一个0表示全部结束了  参考下列两种做法,试试看:
 
方式一:
var
  OpStruc: tSHFileOpStruct;
  frombuf, tobuf: Array [0..128] of Char;
begin
  FillChar( frombuf, Sizeof(frombuf), 0 );
  FillChar( tobuf, Sizeof(tobuf), 0 );
  StrPCopy( frombuf, 'g:\ado\*.exe' );
  StrPCopy( tobuf, 'g:\asp' );
  With OpStruc DO Begin
    Wnd:= Handle;
    wFunc:= FO_COPY;
    pFrom:= @frombuf;
    pTo:=@tobuf;
    fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
    fAnyOperationsAborted:= False;
    hNameMappings:= Nil;
    lpszProgressTitle:= Nil;
  end;
  ShFileOperation( OpStruc );
end;
方式二:
function CopyFile(SourceName,TargetName:String):Boolean;
var
  F:TShFileOpStruct;
begin
  F.wnd:=InputForm.Handle;
  F.wFunc:=FO_COPY; {操作方式}
  F.pFrom:=PChar(SourceName #0#0);
  F.pTo:=PChar(TargetName #0#0);
  F.fFlags:=FOF_ALLOWUNDO OR FOF_RENAMEONCOLLISION;
  result:= ShFileOperation(F)=0;
end;
小弟略懂delphi,对BCB不熟< >麻烦您自行修改~< > ~~~静心养德~~~
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-12 14:24:56 IP:211.21.xxx.xxx 未訂閱
我剛發現偶而還是會發生 1026 的錯誤 而且在特定的環境下複製某些檔則一定會有 1026 這個錯誤]    我的程式修改如下 void __fastcall MySaveFile(char *s, char *z){ SHFILEOPSTRUCT oFile; AnsiString ErrS; int ErrCode;       ZeroMemory(&oFile, sizeof(SHFILEOPSTRUCT));    oFile.lpszProgressTitle="檔案複製中...";    oFile.hwnd=Form1->Handle;    oFile.wFunc=FO_COPY;    oFile.pFrom=s;    oFile.pTo=z;    oFile.fFlags= FOF_WANTNUKEWARNING;//FOF_FILESONLY | FOF_NOERRORUI;//FOF_NOERRORUI=不顯示錯誤視窗    ErrCode=SHFileOperation(&oFile);    if(ErrCode!=NULL){              if(ErrCode!=7){           ErrS.cat_printf("Error Code %d\n%s\n%s",ErrCode,s,z);           MessageBox(NULL,ErrS.c_str(),"錯誤訊息",MB_OK);         }     } }    void __fastcall TForm1::ImgBtn4Click(TObject *Sender){ SaveDialog1->FileName=FileName[0+PageCnt]+".mp3";  if(SaveDialog1->Execute()){ AnsiString s; AnsiString z;                                     AnsiString NewFileName = ExtractFilePath(Application->ExeName);    s.sprintf("%s\x00\x00\x00",NewFileName+"英語會話課程\\MP3\\"+FileName[0+PageCnt]+".mp3");    z.sprintf("%s\x00\x00\x00",SaveDialog1->FileName);    MySaveFile(s.c_str(),z.c_str());  } }     無所不在 發表人 - jtain 於 2005/01/12 14:54:40 發表人 - jtain 於 2005/01/12 15:09:28
------
無所不在
cogi698
一般會員


發表:2
回覆:3
積分:1
註冊:2004-07-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-12 16:32:27 IP:220.130.xxx.xxx 未訂閱
你應該沒有按照上面那位大大的範例去改吧! 試著加入下面紅色的部份:
 
void __fastcall MySaveFile(char *s, char *z){
SHFILEOPSTRUCT oFile;
z=z '\0';
s=s '\0';    ZeroMemory(&oFile, sizeof(SHFILEOPSTRUCT));
oFile.lpszProgressTitle="檔案複製中...";
oFile.hwnd=Form1->Handle;
oFile.wFunc=FO_COPY;
oFile.pFrom=s;//s.c_str();
oFile.pTo=z;//s.c_str();
oFile.fFlags= FOF_FILESONLY;
SHFileOperation(&oFile);
}
系統時間:2024-04-30 2:38:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!