抱歉我用的簡體中文,沒有轉換過來。如何在复制中,同時選擇兩類我需要的文件? |
尚未結案
|
WWW999
一般會員 發表:18 回覆:19 積分:7 註冊:2005-09-26 發送簡訊給我 |
抱歉我用的簡體中文,沒有轉換過來。 抱歉我用的簡體中文,沒有轉換過來。 如何在复制中,同時選擇兩類我需要的文件? 文件: *-*-6???-* *-*-7???-* procedure TForm1.BitBtn5Click(Sender: TObject); var F:TShFileOpStruct; begin F.wnd:=Handle; F.wFunc:=FO_COPY; {操作方式} F.pFrom:=pchar(edit1.text '\*-*-6???-*'); F.pTo:= pchar(edit2.text); F.fFlags:=FOF_ALLOWUNDO OR FOF_RENAMEONCOLLISION; {操作選項} if ShFileOperation(F)<>0 then ShowMessage('文件拷貝失敗!'); end;
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
你的文件格式我不懂,我用我的方式表示。
因為>
>
所以
< class="code">
F.pFrom:=pchar(edit1.text '\*.zip' #0 '*.rar' #0 #0 );
如此應該會套用了吧! ----------------------------------------------
We will either find a way, or make one. -Hannibal -。 發表人 - stallion 於 2005/10/07 19:54:43
|
WWW999
一般會員 發表:18 回覆:19 積分:7 註冊:2005-09-26 發送簡訊給我 |
你的文件格式我不懂,我用我的方式表示。
因為SDK文件上說: pFrom
Pointer to a buffer that specifies one or more source file names. Multiple names must be null-separated. The list of names must be double null-terminated. 所以 F.pFrom:=pchar(edit1.text '\*.zip' #0 '*.rar' #0 #0 ); 如此應該會套用了吧! ----------------------------------------------
We will either find a way, or make one. -Hannibal -。 發表人 - stallion 於 2005/10/07 19:54:43 我是剛學delphi7,多謝指教。 可不可以向您請教另一個問題 *-*-6???-*.1005 *-*-8???-*.0923 *-*-6???-*.0910 以上文件我想通過判斷它們的擴展名,复制到分別為m01~m12文件下的01~31文件夾中。 如何來判斷將它們擴展名?是用ExtractFileExt? 多謝!
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
WWW999
一般會員 發表:18 回覆:19 積分:7 註冊:2005-09-26 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
var Name:AnsiString; begin Name := '235.0923'; Name := ExtractFileExt(Name); if Name ='.1005' then ShowMessage('1005') else if Name ='.0923' then ShowMessage('.0923') else ShowMessage('none'); end;---------------------------------------------- We will either find a way, or make one. -Hannibal -。 |
WWW999
一般會員 發表:18 回覆:19 積分:7 註冊:2005-09-26 發送簡訊給我 |
var
Name:AnsiString;
begin
Name := '235.0923';
Name := ExtractFileExt(Name);
if Name ='.1005' then
ShowMessage('1005')
else if Name ='.0923' then
ShowMessage('.0923')
else
ShowMessage('none');
end; 多謝您的回答,謝謝。 可能您理解錯了,我想用這個函數來讀取如*.1005 前兩位的數即10來判斷它應到從k01→k12文件夾中的k10文件夾, 后再取如*.1005后兩位的數即05從01文件夾→31文件夾中的→05文件夾 從k01→k12文件夾每個文件夾都有01→31文件夾 這個問題也許很難,您可以不的回答,再次感謝!!!
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
引言: 前兩位的數即10來判斷它應到從k01→k12文件夾中的k10文件夾, k01->k12 就是 代表 1->12個月, 每個月的專屬資料夾 后再取如*.1005后兩位的數即05從01文件夾→31文件夾中的→05文件夾 從k01→k12文件夾每個文件夾都有01→31文件夾 就是日期嘍 這個問題也許很難,您可以不的回答,再次感謝!!! 這句話讓人啼笑皆非....應該是您發問的方式有問題, 借stallion 大大的程式碼改一下 var Name:AnsiString; mm,dd: String; begin Name := '235.0923'; Name := ExtractFileExt(Name); mm := Copy(Name,2,2); // 取出'09' dd := Copy(Name.4,2); // 取出'23' edit2.text := '(目的主目錄)' '\k' mm '\' dd '(目的檔名)'; end; |
WWW999
一般會員 發表:18 回覆:19 積分:7 註冊:2005-09-26 發送簡訊給我 |
引言:
-------------------------------------------------------------------------------- 前兩位的數即10來判斷它應到從k01→k12文件夾中的k10文件夾,
k01->k12 就是 代表 1->12個月, 每個月的專屬資料夾
后再取如*.1005后兩位的數即05從01文件夾→31文件夾中的→05文件夾
從k01→k12文件夾每個文件夾都有01→31文件夾
就是日期嘍
這個問題也許很難,您可以不的回答,再次感謝!!!
這句話讓人啼笑皆非.... -------------------------------------------------------------------------------- 應該是您發問的方式有問題, 借stallion 大大的程式碼改一下 var
Name:AnsiString;
mm,dd: String;
begin
Name := '235.0923';
Name := ExtractFileExt(Name);
mm := Copy(Name,2,2); // 取出'09'
dd := Copy(Name.4,2); // 取出'23'
edit2.text := '(目的主目錄)' '\k' mm '\' dd '(目的檔名)';
end; 多謝您的指教! 小弟愚笨 procedure TForm1.BitBtn1Click(Sender: TObject); var strcaption,strdirectory: string; Wstrboot:WideString; begin strcaption:='請選擇一個文件夾'; Selectdirectory(strcaption,Wstrboot,strdirectory); edit1.Text:= strdirectory; if DirectoryExists(Edit1.Text) then FileListBox1.Directory := Edit1.Text; FileListBox2.Directory := Edit1.Text; edit1.Text:= strdirectory; end; procedure TForm1.BitBtn2Click(Sender: TObject); var strcaption,strdirectory: string; Wstrboot:WideString; begin strcaption:='請選擇一個文件夾'; Wstrboot:=''; Selectdirectory(strcaption,Wstrboot,strdirectory); edit2.Text:= strdirectory; end; procedure TForm1.BitBtn5Click(Sender: TObject); var F:TShFileOpStruct; begin F.wnd:=Handle;
F.wFunc:=FO_COPY; {操作方式} F.pFrom:=pchar(edit1.text '\*-*-6???-*'); F.pTo:= pchar(edit2.text); F.fFlags:=FOF_ALLOWUNDO OR FOF_RENAMEONCOLLISION; {操作?禎} if ShFileOperation(F)<>0 then ShowMessage('文件拷最失???onst AnsiStrin!'); end; 要在复制程序完成后來執行,是不是要添加子程序? Procedure ExtractFileExt(const AnsiString, FileName); Var Name:AnsiString; mm,dd: String; begin Name := pchar((edit1.text) '\*-*-6???-*.*'); With ExtractFileExt(Name) do mm := Copy(Name,2,2); dd := Copy(Name,4,2); edit2.text := strdirectory '\k' mm '\' dd; end; end. 為什么不能執行?
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
開新專案, 並在專案所在目錄建立 TestSrc, TestDest 資料夾
將你要 複製的檔案都放到 TestSrc 資料夾下
執行程式....and Good Luck!!
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI; type TForm1 = class(TForm) Button1: TButton; procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var StrDirectory: String; StrDirectory_From: String; StrDirectory_To: String; function CheckAndCreateDirectory(DestDir: String): Boolean; begin Result := False; if not DirectoryExists(DestDir) then Result := ForceDirectories(DestDir) else Result := True; end; function CheckFileFormat(sFile: String): Boolean; begin //在這裡檢查檔案格式是不是符合需求 Result := True; end; procedure TForm1.FormShow(Sender: TObject); var tmpStr: String; i,j: Integer; begin StrDirectory := ExtractFileDir(ParamStr(0)); StrDirectory := IncludeTrailingBackslash(StrDirectory); StrDirectory_From := IncludeTrailingBackslash(StrDirectory 'TestSrc'); StrDirectory_To := IncludeTrailingBackslash(StrDirectory 'TestDest'); end; procedure TForm1.Button1Click(Sender: TObject); var SearchRec: TSearchRec; ExtName: String; mm,dd: String; toPath: String; fFrom,fTo: String; begin if DirectoryExists(StrDirectory_From) then begin //若指定目錄存在時才做 if FindFirst(StrDirectory_From '*.*', faAnyFile, SearchRec) = 0 then begin repeat if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin //如果是檔案才做 if (SearchRec.Attr and faArchive) = faArchive then begin // 檔案名稱符合規格才做 if CheckFileFormat(SearchRec.Name) then begin ExtName := ExtractFileExt(SearchRec.Name); mm := Copy(ExtName,2,2); // 取出月份 dd := Copy(ExtName,4,2); // 取出日期 if (''<>mm) and (''<>dd) then begin toPath := IncludeTrailingBackslash(StrDirectory_To 'k' mm) dd; // 檢查並建立目的目錄 if CheckAndCreateDirectory(toPath) then begin fFrom := StrDirectory_From SearchRec.Name; fTo := IncludeTrailingBackslash(toPath) SearchRec.Name; try CopyFile(PChar(fFrom), PChar(fTo), false); except end; end; end; end; end; end; until FindNext(SearchRec) <> 0; end; FindClose(SearchRec); end; end; end. |
WWW999
一般會員 發表:18 回覆:19 積分:7 註冊:2005-09-26 發送簡訊給我 |
引言:開新專案, 並在專案所在目錄建立 TestSrc, TestDest 資料夾 將你要 複製的檔案都放到 TestSrc 資料夾下 執行程式....and Good Luck!! unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI; type TForm1 = class(TForm) Button1: TButton; procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var StrDirectory: String; StrDirectory_From: String; StrDirectory_To: String; function CheckAndCreateDirectory(DestDir: String): Boolean; begin Result := False; if not DirectoryExists(DestDir) then Result := ForceDirectories(DestDir) else Result := True; end; function CheckFileFormat(sFile: String): Boolean; begin //在這裡檢查檔案格式是不是符合需求 Result := True; end; procedure TForm1.FormShow(Sender: TObject); var tmpStr: String; i,j: Integer; begin StrDirectory := ExtractFileDir(ParamStr(0)); StrDirectory := IncludeTrailingBackslash(StrDirectory); StrDirectory_From := IncludeTrailingBackslash(StrDirectory 'TestSrc'); StrDirectory_To := IncludeTrailingBackslash(StrDirectory 'TestDest'); end; procedure TForm1.Button1Click(Sender: TObject); var SearchRec: TSearchRec; ExtName: String; mm,dd: String; toPath: String; fFrom,fTo: String; begin if DirectoryExists(StrDirectory_From) then begin //若指定目錄存在時才做 if FindFirst(StrDirectory_From '*.*', faAnyFile, SearchRec) = 0 then begin repeat if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin //如果是檔案才做 if (SearchRec.Attr and faArchive) = faArchive then begin // 檔案名稱符合規格才做 if CheckFileFormat(SearchRec.Name) then begin ExtName := ExtractFileExt(SearchRec.Name); mm := Copy(ExtName,2,2); // 取出月份 dd := Copy(ExtName,4,2); // 取出日期 if (''<>mm) and (''<>dd) then begin toPath := IncludeTrailingBackslash(StrDirectory_To 'k' mm) dd; // 檢查並建立目的目錄 if CheckAndCreateDirectory(toPath) then begin fFrom := StrDirectory_From SearchRec.Name; fTo := IncludeTrailingBackslash(toPath) SearchRec.Name; try CopyFile(PChar(fFrom), PChar(fTo), false); except end; end; end; end; end; end; until FindNext(SearchRec) <> 0; end; FindClose(SearchRec); end; end; end. 多謝您的回答! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |