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

C#-->Delphi7 System.Reflection及StreamWriter

尚未結案
aAlan
一般會員


發表:38
回覆:24
積分:12
註冊:2004-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-04 14:05:32 IP:61.228.xxx.xxx 未訂閱
各位大大您好: 小弟想把以下C#語法改為Delphi 7語法,惟小弟是C#外行人,還望各位教我以下語法的含意,還望能舉例,多謝各位善心前輩了。 一、logFile=Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.Location)+"\\GHBM.log"    二、StreamWriter sw=new StreamWriter(logFile,true,System,Text.Encoding("big5"));     sw.WriteLine(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"))+"寫入"; 拜託了.........
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-04 23:49:25 IP:61.62.xxx.xxx 未訂閱
Hi, 第一段是用來取出執行檔所在的路徑加上 \GHBM.log 組成該 log file 的完整檔名, 第二段則是使用 StreamWriter 來進行寫檔的動作, 在 delphi 中可以使用 FileStream, TStringList, TextFile 等來操作皆可, 大致翻譯如下, ( 不過你的第二段應該有筆誤, StreamWriter sw=new StreamWriter(logFile,true,System.Text.Encoding("big5")); )
var
  logFile: string;
  f: TextFile;
begin
  logFile := ExtractFilePath(Application.ExeName) '\GHBM.log';
  AssignFile(f, logFile);
  if FileExists(logFile) then
    Append(f)
  else
    ReWrite(f);      WriteLn(f, FormatDateTime('yyyy/mm/dd hh:nn:ss', Now) '輸入');      //...      CloseFile(f);    end;
至於 Encoding 的話, 由於 delphi 的 textfile 寫入, 就只是普通的 AnsiString 所以不用特別去設定囉! 在 .net 中 default 是 Unicode 的, 所以要用 big5 或 codepage 950 來設定和現有 big5 檔案相容的寫入編碼方式!
aAlan
一般會員


發表:38
回覆:24
積分:12
註冊:2004-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-05 17:47:32 IP:61.228.xxx.xxx 未訂閱
您真是韜略胸中存! 還有一個小小的疑問,那就是 我有A,B兩個unit,其中A unit 沒有Form,而B unit含有form且大多都繼承A unit的procedure及function,但logFile的程式碼是寫在A unit上,因為A unit沒有Form,故 ExtractFilePath(Application.ExeName) '\GHBM.log'中的Application.ExeName就不存在這項屬性,請問一下,若一定要將程式碼寫到A unit上,要如何替代Application.ExeName這樣屬性呢? 這只是題外的問題,還是真的很謝謝您的指導!
引言: Hi, 第一段是用來取出執行檔所在的路徑加上 \GHBM.log 組成該 log file 的完整檔名, 第二段則是使用 StreamWriter 來進行寫檔的動作, 在 delphi 中可以使用 FileStream, TStringList, TextFile 等來操作皆可, 大致翻譯如下, ( 不過你的第二段應該有筆誤, StreamWriter sw=new StreamWriter(logFile,true,System.Text.Encoding("big5")); )
var
  logFile: string;
  f: TextFile;
begin
  logFile := ExtractFilePath(Application.ExeName) '\GHBM.log';
  AssignFile(f, logFile);
  if FileExists(logFile) then
    Append(f)
  else
    ReWrite(f);      WriteLn(f, FormatDateTime('yyyy/mm/dd hh:nn:ss', Now) '輸入');      //...      CloseFile(f);    end;
至於 Encoding 的話, 由於 delphi 的 textfile 寫入, 就只是普通的 AnsiString 所以不用特別去設定囉! 在 .net 中 default 是 Unicode 的, 所以要用 big5 或 codepage 950 來設定和現有 big5 檔案相容的寫入編碼方式!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-05 19:45:20 IP:203.95.xxx.xxx 未訂閱
Application 是全域變數, 應該不會有調用不到的問題才對!!
aAlan
一般會員


發表:38
回覆:24
積分:12
註冊:2004-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-05 21:54:38 IP:61.228.xxx.xxx 未訂閱
應該是說在A unit無法取用ExeName這項屬性,因為通常我再按.的時候會出現屬性的框框,但是這次在狀態列上卻出現「Unable to invoke Code completion due to error in source code」,所以還沒到compiler這一關,我就知道有錯了。可是我把logFile:=ExtractFilePath(Application.ExeName)+'\GHBM.log'; 改成logFile:='GHBM.log'; 這樣就可以,Compiler也過了,Run也沒有問題。 不知道為何故? 沒關係,還非常感謝版主對於logFile的協助!您對程式語言真是熟悉啊! 萬分敬佩!    
引言: Application 是全域變數, 應該不會有調用不到的問題才對!!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-05 22:12:09 IP:61.62.xxx.xxx 未訂閱
那可以在 A unit 中 uses Forms 的 unit, 藉以取得 Application 這個全域變數即可, 或是在 A unit 中 uses Windows 的 unit , 使用 windows api 的 GetCurrentDirectory 亦可, 當然, 如同你的方式, 直接不指定也可以, 或是調用 System 下的 ParamStr(0) 也會傳會執行檔的名稱, 皆可!!    如,    
// 使用 windows api
function test: string;
var
  str: Array[0..Max_Path] of AnsiChar;
begin
  GetCurrentDirectory(Max_Path, str);
  Result := str;
end;    // 使用 Application 全域變數
function test2: string;
begin
  Result := Application.ExeName;
end;    // 使用命令列參數
function test3: string;
begin
  Result := ParamStr(0);
end;
aAlan
一般會員


發表:38
回覆:24
積分:12
註冊:2004-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-07 01:20:04 IP:61.228.xxx.xxx 未訂閱
timhuang您好: 真是萬分感謝,您可比臥龍、鳳雛再世! 晚輩真是佩服的五體投地!    
引言: 那可以在 A unit 中 uses Forms 的 unit, 藉以取得 Application 這個全域變數即可, 或是在 A unit 中 uses Windows 的 unit , 使用 windows api 的 GetCurrentDirectory 亦可, 當然, 如同你的方式, 直接不指定也可以, 或是調用 System 下的 ParamStr(0) 也會傳會執行檔的名稱, 皆可!! 如,
// 使用 windows api
function test: string;
var
  str: Array[0..Max_Path] of AnsiChar;
begin
  GetCurrentDirectory(Max_Path, str);
  Result := str;
end;    // 使用 Application 全域變數
function test2: string;
begin
  Result := Application.ExeName;
end;    // 使用命令列參數
function test3: string;
begin
  Result := ParamStr(0);
end;
系統時間:2024-05-17 22:14:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!