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

確定文字檔已經轉出完成,以提交給另一程式使用

尚未結案
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-28 14:47:56 IP:61.59.xxx.xxx 未訂閱
請問我用AssignFile(TF,FileName); ReWrite(TF); 方式寫入一文字檔,倂欲於轉出完成後,給另一程式使用 所以必須於確定該文字檔已經轉出完成才能給另一程式使用 所以想請問該如何確定該文字檔已經轉出完成 thanks
hagar
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-28 15:31:39 IP:202.39.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_id=26986 --- Everything I say is a lie.
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-28 16:42:12 IP:61.59.xxx.xxx 未訂閱
參閱hagar所提及之方式,參閱hagar所提及之方式,但該文字檔假設正在轉出中,則所欲提交之程式即會跳過而沒執行 也當文字檔轉出完成該程序也早已略過,而未執行到 是否應該是檢查該文檔以完成轉出動作後,才能並且確實有執行
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-28 17:36:12 IP:211.76.xxx.xxx 未訂閱
如果該檔案可被更名的話,就表示轉出完成,如果不行的話,就表示正在使用中 努力會更接近成功
------
努力會更接近成功
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-28 18:34:11 IP:203.222.xxx.xxx 未訂閱
1. 試試看用 Message 的方式 project A 送 Message 給 project B 然後在 project B 接收 message 的地方處理 2. 用 MemoryMappingObject 的方式處理
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-01 10:03:18 IP:61.59.xxx.xxx 未訂閱
如果該文字檔之產生是由自己的Project產生應該好處理,我測試結果是在ReWrite(TF)完畢後,再執行育讀取之程式,所以沒有問題 另一問題是如果轉出與轉入是分別有二支外部程式 哪真的就必須等待該文字檔以確實完成,才能出觸發執行欲讀入之程式 才不致沒有執行到欲讀入之程式或無法執行 所以想請教如何於文字檔確實完成時,觸發執行欲讀入之程式?
hagar
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-01 10:12:48 IP:202.39.xxx.xxx 未訂閱
用迴圈一直測
function IsFileInUse(FileName: TFileName): Boolean; 
var 
   HFileRes: HFILE; 
begin 
   Result := False; 
   if not FileExists(FileName) then Exit; 
   HFileRes := CreateFile(PChar(FileName), 
                         GENERIC_READ or GENERIC_WRITE, 
                         0, 
                         nil, 
                         OPEN_EXISTING, 
                         FILE_ATTRIBUTE_NORMAL, 
                         0); 
   Result := (HFileRes = INVALID_HANDLE_VALUE); 
   if not Result then 
      CloseHandle(HFileRes); 
end;     procedure TForm1.Button1Click(Sender: TObject);
var
  InUse: Boolean;
begin
  // ...
  repeat
    InUse := IsFileInUse('C:\xx.txt');
    Application.ProcessMessages;
    Sleep(300); // 休息一下
  until Not InUse;
  // ...
end;
--- Everything I say is a lie. 發表人 - hagar 於 2003/11/01 10:44:28
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-11-01 10:19:09 IP:61.59.xxx.xxx 未訂閱
謝謝各位之指教 如hagar所言,一值對該檔案測,會不會對寫入時,或速度有影響?
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-11-01 10:51:39 IP:203.203.xxx.xxx 未訂閱
一直有I/O動作 當然會拖慢系統 至於拖慢多少,就看你系統的 I/O 效能是否會讓你很快就有明顯的感受 所以還是用 1. 試試看用 Message 的方式 project A 送 Message 給 project B 然後在 project B 接收 message 的地方處理 2. 用 MemoryMappingObject 的方式處理
minjiu
中階會員


發表:27
回覆:119
積分:69
註冊:2002-06-26

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-11-11 13:40:46 IP:218.164.xxx.xxx 未訂閱
關於hagar版主提出的IsFileInUse這個函式,我試過這個函式只限於某些應用程式開啟要檢查的檔案時才有效(如Word),若使用記事本開啟一個文字檔,再用這個函式檢查,會無效用,我想這似乎與開啟檔案的應用程式是否會鎖定檔案有關,所以想請問是否有有辦法真的達到檢查檔案目前是否有被使用...謝謝!!
系統時間:2024-05-04 22:57:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!