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

寫 Console 程式時, 遇到開檔路徑有中文有時會出現 EInOutError..

尚未結案
Theodore
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-12-05 16:06:24 IP:220.135.xxx.xxx 未訂閱
寫 Console 程式時, 遇到開檔路徑有中文有時會出現 EInOutError.. 譬如: AssignFile(MyFile, "D:\xxx\xxx\上課資訊\xxxx.dat"); Rewrite(MyFile); <== 發生錯誤於此行 .. .. .. .. 請問各位先進該怎麼解決呢?
huwk
資深會員


發表:26
回覆:340
積分:323
註冊:2002-04-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-12-05 17:04:36 IP:61.222.xxx.xxx 未訂閱
與中文應沒有關係!    而是rewrite只會自動幫你建檔案,並不會自動幫你建目錄! 故請修改如下    
 
uses FileCtrl;    var myfile:TextFile;
begin
  if not DirectoryExists('D:\xxx\xxx\上課資訊') then  //判別是否存在
    ForceDirectories ('D:\xxx\xxx\上課資訊');  //不存在先建立
  AssignFile(MyFile,'D:\xxx\xxx\上課資訊\xxxx.dat');
  rewrite(myfile);
------
熊的學習 http://huwk.blogspot.com
Theodore
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-12-06 11:19:31 IP:220.135.xxx.xxx 未訂閱
引言: 與中文應沒有關係! 而是rewrite只會自動幫你建檔案,並不會自動幫你建目錄! 故請修改如下
 
uses FileCtrl;    var myfile:TextFile;
begin
  if not DirectoryExists('D:\xxx\xxx\上課資訊') then  //判別是否存在
    ForceDirectories ('D:\xxx\xxx\上課資訊');  //不存在先建立
  AssignFile(MyFile,'D:\xxx\xxx\上課資訊\xxxx.dat');
  rewrite(myfile);
感謝回答. 經過我的測試問題大概知道是如何發生的了. 情況如下: 我寫一隻 console ap, 它會處理長檔名的檔案. 正常在 dos prompt 下執行它沒問題, 它可以正常的處理檔案. 但我現在是由主程式, 經由 createprocess 去執行它, 並需等它做完才能進行下一步驟. 沒想到 createprocess 之後的該程式行程所屬的 shell 是最基本的dos shell, 並無法處理長檔名的檔案, 所以才會認為是錯誤檔案名. 所以想請教各位的是 以我所需要這樣的條件 1. 由主程式去執行console ap 2. 必須等到 console ap 執行完畢才回傳繼續做動作 3. 所產生的shell 環境要能處理長檔名, 不然 console ap 無法正常. 我該改用哪個方法呢? 附註: 這是我用的執行函式
function ExecuteAndWait(const CommandLine : string) : cardinal;
var
 tSI : TStartupInfo;
 tPI : TProcessInformation;
 dwI : DWORD;
 VarU : UINT;
begin
 Result := ErrUINT;
 FillChar(tSI, sizeof(TStartupInfo), 0);
 tSI.cb := sizeof(TStartupInfo);
 tSI.dwFlags := STARTF_USESHOWWINDOW;
 tSI.wShowWindow := SW_SHOWMINNOACTIVE;     if (CreateProcess(nil, pchar(CommandLine), nil, nil, False, 0, nil, PChar(CurDir), tSI, tPI)) then begin
   dwI := WaitForSingleObject(tPI.hProcess, INFINITE);       if (dwI = WAIT_OBJECT_0) then
     if (GetExitCodeProcess(tPI.hProcess, dwI)) then Result := dwI;       CloseHandle(tPI.hProcess);
   CloseHandle(tPI.hThread);
 end;
end;
 
系統時間:2024-05-17 12:21:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!