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

如何將某個目錄底下的所有檔案複製到另外一個目錄裡

尚未結案
nonokoko
一般會員


發表:10
回覆:10
積分:4
註冊:2003-11-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-22 21:58:40 IP:218.174.xxx.xxx 未訂閱
請問一下~Delphi有沒有函數將某個目錄底下所有的檔案複製到另外一個目錄底下ㄚ?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-22 22:10:37 IP:202.39.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21922 --- Everything I say is a lie.
nonokoko
一般會員


發表:10
回覆:10
積分:4
註冊:2003-11-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-23 02:22:26 IP:218.174.xxx.xxx 未訂閱
引言: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21922 --- Everything I say is a lie.
可是我出現了這樣子錯誤訊息耶! [Error] Unit1.pas(6): Identifier redeclared: 'SysUtils' [Error] Unit1.pas(43): Undeclared identifier: 'CopyDir'
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-23 02:25:47 IP:61.64.xxx.xxx 未訂閱
簡單一點 改用command也是ok啦
nonokoko
一般會員


發表:10
回覆:10
積分:4
註冊:2003-11-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-23 03:18:22 IP:218.174.xxx.xxx 未訂閱
引言: 簡單一點 改用command也是ok啦
不好意思~~~請問用command是什麼意思啊?
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-23 03:35:50 IP:61.64.xxx.xxx 未訂閱
報歉 沒說的很清楚 我是說使用 dos的xcopy指令 引用也行 其他參數 Microsoft Windows 2000 [版本 5.00.2195] (C) Copyright 1985-2000 Microsoft Corp. 複製檔案和樹狀目錄。 XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W] [/C] [/I] [/Q] [/F] [/L] [/H] [/R] [/T] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]\r\n [/EXCLUDE:file1[ file2][ file3]...] source 指定要複製的檔案。 destination 指定位置或者/以及新檔案的名稱。 /A 只複製設定成保存屬性的檔案,不要改變屬性的設定。 /M 只複製設定成保存屬性的檔案,並清除保存屬性。 /D:m-d-y 複製在指定日期當天或之後發生變更的檔案。如果沒有給日期, 只複製那些來源檔案日期比目的檔案日期為新的檔案。 /EXCLUDE:file1[ file2][ file3]... 指定檔案清單字串。如果有字串對應到要進行複製的檔案絕對 路徑的任何部分,這個檔案會被排除複製。例如,指定字串 \obj\ 或 .obj 的話,會排除所有在 obj 目錄下副檔名是 .obj 的檔案複製。 /P 在建立每個目的檔案時顯示提示。 /S 複製每個目錄及其包含的子目錄,不複製空目錄。 /E 複製每個目錄及其包含的子目錄,也複製空目錄。/S 與 /E 相同,能夠用來修改 /T。 /V 驗證每個新檔案。 /W 在複製之前提示您按鍵繼續。 /C 如果錯誤發生時也繼續複製。 /I 如果目的不存在且複製一個以上的檔案的話,就假設指定的 目的一定是目錄。 /Q 在複製時不要顯示檔名。 /F 在複製時顯示來源及目的檔案的全部檔名。 /L 顯示要複製的檔案。 /H 時複製隱藏檔和系統檔。 /R 覆蓋唯讀檔案。 /T 建立目錄結構,但不複製其中的檔案。不包括空目錄及子目錄。 /T /E 會包括空目錄及子目錄。 /U 只複製已經存在目的位置的檔案。 /K 複製檔案屬性。通常 Xcopy 會重設唯讀的屬性。 /N 用所產生的短檔名來進行複製。 /O 複製檔案所有權及 ACL 資訊。 /X 複製檔案審查設定 (包含 /O)。 /Y 不要提示您確認是否要覆蓋一個已經存在的檔案。 /-Y 示您確認是否要覆蓋一個已經存在的檔案。 /Z 在可重新開始的模式中複製網路檔案。 參數 /Y 可以在 COPYCMD 環境變數中預先設定。但可以在指令行中用 /-Y 參數 來覆蓋原有設定。 ================================================================ 參考一下 【問題】ShellExecute和WinExec http://delphi.ktop.com.tw/topic.php?topic_id=27250 http://delphi.ktop.com.tw/topic.php?topic_id=39712 假設bat檔的內容如下 md c:\1234 //新增目錄防止無此目錄 xcopy /y/a/e/c/i/h/f/r C:\995\*.* c:\1234 // 指令參數 路徑 目地 改一下 人性化 可改異動 發表人 - ab 於 2003/11/23 03:55:35
nonokoko
一般會員


發表:10
回覆:10
積分:4
註冊:2003-11-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-23 04:38:39 IP:218.174.xxx.xxx 未訂閱
引言: 報歉 沒說的很清楚 我是說使用 dos的xcopy指令 引用也行 其他參數 Microsoft Windows 2000 [版本 5.00.2195] (C) Copyright 1985-2000 Microsoft Corp. 複製檔案和樹狀目錄。 XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W] [/C] [/I] [/Q] [/F] [/L] [/H] [/R] [/T] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]\r\n [/EXCLUDE:file1[ file2][ file3]...] source 指定要複製的檔案。 destination 指定位置或者/以及新檔案的名稱。 /A 只複製設定成保存屬性的檔案,不要改變屬性的設定。 /M 只複製設定成保存屬性的檔案,並清除保存屬性。 /D:m-d-y 複製在指定日期當天或之後發生變更的檔案。如果沒有給日期, 只複製那些來源檔案日期比目的檔案日期為新的檔案。 /EXCLUDE:file1[ file2][ file3]... 指定檔案清單字串。如果有字串對應到要進行複製的檔案絕對 路徑的任何部分,這個檔案會被排除複製。例如,指定字串 \obj\ 或 .obj 的話,會排除所有在 obj 目錄下副檔名是 .obj 的檔案複製。 /P 在建立每個目的檔案時顯示提示。 /S 複製每個目錄及其包含的子目錄,不複製空目錄。 /E 複製每個目錄及其包含的子目錄,也複製空目錄。/S 與 /E 相同,能夠用來修改 /T。 /V 驗證每個新檔案。 /W 在複製之前提示您按鍵繼續。 /C 如果錯誤發生時也繼續複製。 /I 如果目的不存在且複製一個以上的檔案的話,就假設指定的 目的一定是目錄。 /Q 在複製時不要顯示檔名。 /F 在複製時顯示來源及目的檔案的全部檔名。 /L 顯示要複製的檔案。 /H 時複製隱藏檔和系統檔。 /R 覆蓋唯讀檔案。 /T 建立目錄結構,但不複製其中的檔案。不包括空目錄及子目錄。 /T /E 會包括空目錄及子目錄。 /U 只複製已經存在目的位置的檔案。 /K 複製檔案屬性。通常 Xcopy 會重設唯讀的屬性。 /N 用所產生的短檔名來進行複製。 /O 複製檔案所有權及 ACL 資訊。 /X 複製檔案審查設定 (包含 /O)。 /Y 不要提示您確認是否要覆蓋一個已經存在的檔案。 /-Y 示您確認是否要覆蓋一個已經存在的檔案。 /Z 在可重新開始的模式中複製網路檔案。 參數 /Y 可以在 COPYCMD 環境變數中預先設定。但可以在指令行中用 /-Y 參數 來覆蓋原有設定。 ================================================================ 參考一下 【問題】ShellExecute和WinExec http://delphi.ktop.com.tw/topic.php?topic_id=27250 http://delphi.ktop.com.tw/topic.php?topic_id=39712 假設bat檔的內容如下 md c:\1234 //新增目錄防止無此目錄 xcopy /y/a/e/c/i/h/f/r C:\995\*.* c:\1234 // 指令參數 路徑 目地 改一下 人性化 可改異動 發表人 - ab 於 2003/11/23 03:55:35
謝謝你ㄛ~~不過我的來源目錄是個變數,所以不能用bat檔!!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-11-23 07:07:46 IP:202.39.xxx.xxx 未訂閱
引言: 可是我出現了這樣子錯誤訊息耶! [Error] Unit1.pas(6): Identifier redeclared: 'SysUtils' [Error] Unit1.pas(43): Undeclared identifier: 'CopyDir'
1.檢查 uses 裏 SysUtils 是不是宣告了兩次, 造成重覆? 2.CopyDir 改成 _CopyDir 試試. --- Everything I say is a lie.
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-11-23 11:59:14 IP:61.64.xxx.xxx 未訂閱
不過我的來源目錄是個變數,所以不能用bat檔    就是不要用bat 才舉例bat的寫法 喝喝 
nonokoko
一般會員


發表:10
回覆:10
積分:4
註冊:2003-11-03

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-11-24 01:11:00 IP:211.76.xxx.xxx 未訂閱
引言:
引言: 可是我出現了這樣子錯誤訊息耶! [Error] Unit1.pas(6): Identifier redeclared: 'SysUtils' [Error] Unit1.pas(43): Undeclared identifier: 'CopyDir'
1.檢查 uses 裏 SysUtils 是不是宣告了兩次, 造成重覆? 2.CopyDir 改成 _CopyDir 試試. --- Everything I say is a lie.
我試出來囉~~那我想請教一下,如果我想知道檔案是否傳送成功或失敗,總個傳了幾個檔案或目錄,該怎麼做呢??因為我是個新手,很多都不懂,一直問,真的非常感謝您!!
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-11-24 01:15:55 IP:61.64.xxx.xxx 未訂閱
那你就要跑迴圈判斷了 真的 有這樣的必要嗎 請先看bcb的相關資料 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40899 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40905 其他的部份 KTOP的 包大人 有許多解說 你自己找找 另一方式 也可以引用rar或zip 來協助 來源目錄 大小 數量 不過看你的設計理念 apI是有此方式 如要如此 dos ocmmand就比較不適合了 太多要考慮 發表人 - ab 於 2003/11/24 01:20:08
nonokoko
一般會員


發表:10
回覆:10
積分:4
註冊:2003-11-03

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-11-24 01:26:57 IP:211.76.xxx.xxx 未訂閱
引言: 那你就要跑迴圈判斷了 真的 有這樣的必要嗎 請先看bcb的相關資料 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40899 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40905 其他的部份 KTOP的 包大人 有許多解說 你自己找找 另一方式 也可以引用rar或zip 來協助 來源目錄 大小 數量 不過看你的設計理念 apI是有此方式 如要如此 dos ocmmand就比較不適合了 太多要考慮 發表人 - ab 於 2003/11/24 01:20:08
其他的部份 KTOP的 包大人 有許多解說 你自己找找→這是那裡啊?? 我是用api的設計理念! 我的流程是建立兩個網路磁碟機,將pc1的檔案傳送到pc2,然後要我只是想要知道檔案是否有完全傳送成功!^_____^
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-11-24 01:31:04 IP:61.64.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/pop_profile.asp?mode=display&id=3241 這理底下的 發表文章數:  2615 觀看發表文章明細 , 討論文章明細 , 發問文章明細     或使用 KTOP搜索 按鈕 (每頁的左上角)看看有無神奇的事    或去買這本書也不錯啦 http://www.hot.net.tw/book/033/P2067.htm 《C++ Builder 與 Windows API 範例辭典》/鄭明、鄭世偉     【本書內容】  1.本書內含WinAPI函式高達132個函式,及208個完整、可執行的實例。  2.所有在Windows平台上撰寫視窗程式的程式設計師皆可適用、輕易上手。  3.提供視窗程式設計師在分秒必爭的工作中,更直觀、單純的支援。  4.在實例中,除指定API函式的用法外,並含括其它各類不同API函式。  5.包含有完整註解之滑鼠 & 鍵盤 Hook連接檔(DLL)與執行檔(EXE)程式碼。  6.書附光碟中的實例皆重新歸納至相同屬性的目錄下,方便程式設計師直接取用、複製。     發表人 - ab 於 2003/11/24 01:34:18
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-11-25 00:30:15 IP:218.166.xxx.xxx 未訂閱
很早以前我曾用delphi寫一個定時將指定的檔案從某一個方移到某個地方。這個project還有留著,若你有需要,請回應並告知如何傳給你。 它還是一個incon tray的程式。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-11-25 11:08:58 IP:211.21.xxx.xxx 未訂閱
參數位置跟 DOS 指令用法一樣..沒有用到什麼特殊 API 用在舊版 Delphi 應該也可吧 ...    _XCopy() 複製整個目錄 _Move() 搬移整個目錄 _DelTree() 刪除整個目錄     
 
private
    { Private declarations }
    procedure _XCopy(ASourceDir:String; ADestDir:String);
    procedure _Move(ASourceDir:String; ADestDir:String);
    procedure _DelTree(ASourceDir:String);    //---------------------------------------------------------------------------
procedure TForm1._XCopy(ASourceDir:String; ADestDir:String);
var
FileRec:TSearchrec;
Sour:String;
Dest:String;
begin
  Sour:=ASourceDir;
  Dest:=ADestDir;      if Sour[Length(Sour)]<>'\' then Sour := Sour   '\';
  if Dest[Length(Dest)]<>'\' then Dest := Dest   '\';      if not DirectoryExists(ASourceDir) then
     begin
       ShowMessage('來源目錄不存在!!');
       exit;
     end;      if not DirectoryExists(ADestDir) then
     begin
       ForceDirectories(ADestDir);
     end;      if FindFirst(Sour '*.*',faAnyfile,FileRec) = 0 then
    repeat
      if ((FileRec.Attr and faDirectory) <> 0) then
         begin
           if (FileRec.Name<>'.') and (FileRec.Name<>'..') then
              begin
                _XCopy(Sour FileRec.Name,Dest FileRec.Name);
              end;
         end
      else
         begin
           CopyFile(PChar(Sour FileRec.Name),PChar(Dest FileRec.Name),false);
         end;
    until FindNext(FileRec)<>0;      FindClose(FileRec);
 
end;
//---------------------------------------------------------------------------
procedure TForm1._Move(ASourceDir:String; ADestDir:String);
var
FileRec:TSearchrec;
Sour:String;
Dest:String;
begin
  Sour:=ASourceDir;
  Dest:=ADestDir;      if Sour[Length(Sour)]<>'\' then Sour := Sour   '\';
  if Dest[Length(Dest)]<>'\' then Dest := Dest   '\';      if not DirectoryExists(ASourceDir) then
     begin
       ShowMessage('來源目錄不存在!!');
       exit;
     end;      if not DirectoryExists(ADestDir) then
     begin
       ForceDirectories(ADestDir);
     end;      if FindFirst(Sour '*.*',faAnyfile,FileRec) = 0 then
    repeat
      if ((FileRec.Attr and faDirectory) <> 0) then
         begin
           if (FileRec.Name<>'.') and (FileRec.Name<>'..') then
              begin
                _XCopy(Sour FileRec.Name,Dest FileRec.Name);                    _DelTree(Sour FileRec.Name);                    FileSetAttr(Sour FileRec.Name,faArchive);
                RemoveDir(Sour FileRec.Name);
              end;
         end
      else
         begin
           CopyFile(PChar(Sour FileRec.Name),PChar(Dest FileRec.Name),false);               FileSetAttr(Sour FileRec.Name,faArchive);
           deletefile(Sour FileRec.Name);
         end;
    until FindNext(FileRec)<>0;      FindClose(FileRec);      FileSetAttr(Sour,faArchive);
  RemoveDir(Sour);    end;
//---------------------------------------------------------------------------
procedure TForm1._DelTree(ASourceDir:String);
var
FileRec:TSearchrec;
Sour:String;
begin
  Sour:=ASourceDir;
  if Sour[Length(Sour)]<>'\' then Sour := Sour   '\';      if not DirectoryExists(ASourceDir) then
     begin
       ShowMessage('來源目錄不存在!!');
       exit;
     end;      if FindFirst(Sour '*.*',faAnyfile,FileRec) = 0 then
    repeat
      //if (FileRec.Attr = faDirectory) then
      if ((FileRec.Attr and faDirectory) <> 0) then
         begin
           if (FileRec.Name<>'.') and (FileRec.Name<>'..') then
              begin
                _DelTree(Sour FileRec.Name);                    FileSetAttr(Sour FileRec.Name,faArchive);
                RemoveDir(Sour FileRec.Name);
              end;
         end
      else
         begin
           FileSetAttr(Sour FileRec.Name,faArchive);
           deletefile(Sour FileRec.Name);
         end;
    until FindNext(FileRec)<>0;      FindClose(FileRec);      FileSetAttr(Sour,faArchive);
  RemoveDir(Sour);    end;    
發表人 - bruce0211 於 2003/11/25 12:31:04
系統時間:2024-03-29 18:40:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!