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

CreateOleObject('Scripting.FileSystemObject')

尚未結案
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-29 12:09:06 IP:203.198.xxx.xxx 未訂閱
請問在下面的code中如何拿folder裏所有file的name 和如何free OleVariant Object,即是如何free object "fso"
 
procedure TfrmMain.Button1Click(Sender: TObject);
var
  fso,fso_Folder,fso_Files,fso_File:OleVariant;
  i:integer;
begin
  fso:=CreateOleObject('Scripting.FileSystemObject');
  fso_Folder:=fso.GetFolder('D:\Temp');
  fso_Files:=fso_Folder.Files;
  for i:=0 to fso_Files.count-1 do
  begin
     //show message all file name here
  end;
end;
hagar
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-29 18:07:45 IP:202.39.xxx.xxx 未訂閱
試試:
 
procedure TfrmMain.Button1Click(Sender: TObject);
var
  fso,fso_Folder,fso_Files,fso_File: OleVariant;
  i:integer;
  aFile: IFile;
begin
  fso := CreateOleObject('Scripting.FileSystemObject');
  fso_Folder := fso.GetFolder('D:\Temp');
  fso_Files:=fso_Folder.Files;
  for i := 0 to fso_Files.count-1 do
  begin
    aFile := fso_Files.Items[i];
    ShowMessage(VarToStr(aFile.Name));
  end;
   fso := Unassigned;
end;
-- Everything I say is a lie.
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-30 10:11:27 IP:203.198.xxx.xxx 未訂閱
真是很多謝你hagar....你真是一個delphi能手......你幫了我不少忙    但是我想問aFile: IFile;是在那一個unit可以被滙入.... 因為我complier不到.......出現complier error "Undeclared identifer: IFile"
hagar
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-30 10:37:51 IP:202.39.xxx.xxx 未訂閱
Project -> Import Type Library -> Microsoft Scripting Runtime (Version 1.0) 後 會產生一 Scripting_TLB.pas uses 它即可 -- Everything I say is a lie.
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-30 10:49:16 IP:203.198.xxx.xxx 未訂閱
可行了,但當complier時又出現complier error "Incompatible types:'Variant' and 'IFile'" 它指的是這一句 afile:=fso_Files.Items[i]; 發表人 - superlowb 於 2004/06/30 10:50:49
hagar
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-30 11:47:30 IP:202.39.xxx.xxx 未訂閱
改成如下,不過小弟試了一下, run 到該行還是會有參數錯誤的 Error:
procedure TfrmMain.Button1Click(Sender: TObject);
var
  fso,fso_Folder,fso_Files,fso_File: OleVariant;
  i:integer;
  aFile: Variant;
begin
  fso := CreateOleObject('Scripting.FileSystemObject');
  fso_Folder := fso.GetFolder('D:\Temp');
  fso_Files:=fso_Folder.Files;
  for i := 0 to fso_Files.count-1 do
  begin
    aFile := fso_Files.Item[i]; // 是 Item 不是 Items
    ShowMessage(VarToStr(aFile.Name));
  end;
   fso := Unassigned;
end;
-- Everything I say is a lie.
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-30 12:08:14 IP:203.198.xxx.xxx 未訂閱
aFile := fso_Files.Item[i]; 當行到此句時出現error message "參數錯誤"
hagar
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-01 08:53:59 IP:202.39.xxx.xxx 未訂閱
試試:
procedure TfrmMain.Button5Click(Sender: TObject);
var
  Enum, V: OleVariant;
  Fetched: PLongWord;      fso: Variant;
  fso_Folder: Variant; // IFolder
  fso_Files: Variant;  // IFileCollection
begin
  fso := CreateOleObject('Scripting.FileSystemObject');
  try
    fso_Folder := fso.GetFolder('d:\temp');
    fso_Files := fso_Folder.Files;
    Enum := fso_Files._NewEnum;
    with IUnknown(Enum) as IEnumVariant do
      while Next(1, V, Fetched) = S_OK do
        Memo1.Lines.Add(VarToStr(V.Name));
  finally
    fso := Unassigned;
  end;
end;
-- Everything I say is a lie.
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-02 09:55:31 IP:203.198.xxx.xxx 未訂閱
with IUnknown(Enum) as IEnumVariant do IEnumVariant 應滙入那個unit / class? 因它complier 時說undeclared identifier 'IEnumVariant'
hagar
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-02 10:02:24 IP:202.39.xxx.xxx 未訂閱
uses ActiveX;
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-07-02 10:24:49 IP:203.198.xxx.xxx 未訂閱
多謝hagar,我這樣寫(Fetched:LongWord)就可行了 否則如果是Fetched:PlongWord 就現compilier error在while Next( 1, V, Fetched) = S_OK do : type of actual and formal var parameters must be identical 這樣寫ok 嗎?
procedure TfrmMain.Button1Click(Sender: TObject);
var
  Enum, V: OleVariant;
  //Fetched: PLongWord;
  Fetched:LongWord;      fso: Variant;
  fso_Folder: Variant; // IFolder
  fso_Files: Variant;  // IFileCollection
begin
  fso := CreateOleObject('Scripting.FileSystemObject');
  try
    fso_Folder := fso.GetFolder('d:\temp');
    fso_Files := fso_Folder.Files;
    Enum := fso_Files._NewEnum;
    with IUnknown(Enum) as IEnumVariant do
        while Next( 1, V, Fetched) = S_OK do 
        showmessage(VarToStr(V.Name));
  finally
    fso := Unassigned;
  end;
end;
發表人 - superlowb 於 2004/07/02 10:35:23
hagar
版主


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-07-02 10:40:21 IP:202.39.xxx.xxx 未訂閱
看了一下 ActiveX.pas 中的定義 的確 Next 的第三個參數的型態是 LongWord 至於 OK 不 OK 要看您要的結果有沒有出來吧!? -- Everything I say is a lie.
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-07-02 10:51:00 IP:203.198.xxx.xxx 未訂閱
可行了,很多謝你hagar, 最後請你不要厭我麻煩,我想知道你在那裏可以這麼快便可以找有關資料,是否什麼秘訣?
hagar
版主


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-07-02 11:01:15 IP:202.39.xxx.xxx 未訂閱
一開始時我用 'Scripting.FileSystemObject' 、GetFolder、IFile 等當關鍵字做搜尋 在過程中發現在 vb 內用 for each 的方法很容易達成 便再加上 for each 來做搜尋 得到今天的答案: http://groups.google.com.tw/groups?hl=zh-TW&lr=&ie=UTF-8&selm=3ce3919c_1@dnews -- Everything I say is a lie.
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-07-02 11:14:50 IP:203.198.xxx.xxx 未訂閱
hagar,你這種"有教無類",不收埋自已知識,盡心助人,又謙讓的精神真是令我敬佩.... 在這裏真是再一次多謝你........ 發表人 -
系統時間:2024-04-27 12:13:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!