C#-->Delphi7 System.Reflection及StreamWriter |
尚未結案
|
aAlan
一般會員 發表:38 回覆:24 積分:12 註冊:2004-07-23 發送簡訊給我 |
各位大大您好:
小弟想把以下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 發送簡訊給我 |
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 發送簡訊給我 |
您真是韜略胸中存!
還有一個小小的疑問,那就是
我有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 發送簡訊給我 |
|
aAlan
一般會員 發表:38 回覆:24 積分:12 註冊:2004-07-23 發送簡訊給我 |
應該是說在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 發送簡訊給我 |
那可以在 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 發送簡訊給我 |
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; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |