From 0756bf12d10cf1b7f78c571de0a9ad69cbaeb7ca Mon Sep 17 00:00:00 2001
From: curtis <curtis@i-mps.com>
Date: 星期一, 30 三月 2026 14:24:17 +0800
Subject: [PATCH] fix: 更新內部引用方法參照
---
reassemble/CB_IMGPSScanImp.fileOp.pas | 347 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 347 insertions(+), 0 deletions(-)
diff --git a/reassemble/CB_IMGPSScanImp.fileOp.pas b/reassemble/CB_IMGPSScanImp.fileOp.pas
new file mode 100644
index 0000000..c2e2b64
--- /dev/null
+++ b/reassemble/CB_IMGPSScanImp.fileOp.pas
@@ -0,0 +1,347 @@
+{ ==============================================================================
+ 方法名稱:ReNameContext
+ 引用相依:SaveToFile
+ 方法描述:在指定路徑下執行影像清單的更名同步。遍歷 ContextList,比對舊檔名後更新
+ 為新檔名,同步更新 Context.dat 及對應的文件編號清單(Context_DocNo.dat
+ )。
+============================================================================== }
+Procedure TCB_IMGPSScanX.ReNameContext(Path,OldName,NewName:String);
+var
+ i : Integer;
+begin
+ for i := 0 to ContextList.Count - 1 do
+ begin
+ if OldName = ContextList.Strings[i] then
+ begin
+ ContextList.Strings[i] := NewName;
+ ContextList.SaveToFile(Path+'Context.dat');
+ Context_DocnoList.Strings[i] := FormCode2DocNo(FileName2FormCode(NewName));
+ Context_DocnoList.SaveToFile(Path+'Context_DocNo.dat');
+ Break;
+ end;
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:DeleteImageFile
+ 引用相依:DeleteImageFile, FileExists, LoadFromFile, SaveToFile
+ 方法描述:刪除指定的影像檔案。執行實體刪除後,自動計算文件目錄,並呼叫 SetContext
+ List 從 Context 清單中移除對應的影像記錄。
+============================================================================== }
+Procedure TCB_IMGPSScanX.DeleteImageFile(Path,FileName,CaseID:String); // 刪除檔案 (無法得到DocDir用)
+var
+ i : Integer;
+ FileList:TStringlist;
+ DocDir : String;
+begin
+
+
+ DeleteFile(Path+FileName);
+ DocDir := Path2DocDir(Path,CaseID);
+//ShowMessage('DocDir='+DocDir);
+ SetContextList('D',-1,CaseID,DocDir,FileName);
+ {FileList:=TStringlist.Create;
+ try
+ if FileExists(Path+'Context.dat') then
+ FileList.LoadFromFile(Path+'Context.dat');
+ for i := 0 to FileList.Count - 1 do
+ begin
+ if FileName = FileList.Strings[i] then
+ begin
+ FileList.Delete(i);
+ FileList.SaveToFile(Path+'Context.dat');
+ Break;
+ end;
+ end;
+ if FileList.Count = 0 then
+ DeleteFile(Path+'Context.dat');
+ finally
+ FileList.Free;
+ end;}
+end;
+
+
+{ ==============================================================================
+ 方法名稱:DeleteFormCodeFile
+ 引用相依:DeleteImageFile, FileExists, LoadFromFile, ReSortFileName, SaveToFil
+ e
+ 方法描述:刪除案件中指定 FormID 的所有文件。讀取 Context.dat 並遍歷,若 FormID
+ 匹配則執行刪除(在 ESCAN 模式下會檢查是否非當次掃瞄以保護舊圖)。刪除後
+ 執行檔案序號重新排序。
+============================================================================== }
+Procedure TCB_IMGPSScanX.DeleteFormCodeFile(CaseID,DocDir,FormID:String); //刪除指定FormID文件
+var
+ i: Integer;
+ FileList : TStringlist;
+begin
+ FileList := TStringlist.Create;
+ try
+ FileList.Clear;
+ if FileExists(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat') then
+ FileList.LoadFromFile(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat');
+
+ for i := FileList.Count - 1 downto 0 do
+ begin
+ if FileName2FormCode(FileList.Strings[i]) = FormID then
+ begin
+ if (FMode = 'ESCAN') and (FModeName<>_Msg('異動件')) then
+ begin
+ if ISExistImg(ImageSavePath+CaseID+'\'+DocDir+'\'+FileList.Strings[i]) then
+ begin
+ //ShowMessage('有圖為非當次掃瞄,不可刪除');
+ Break;
+ end;
+ end;
+//ShowMessage(FileList.Strings[i]);
+ DeleteImageFile(ImageSavePath+CaseID+'\'+DocDir+'\',FileList.Strings[i],CaseID);
+ end;
+ end;
+ finally
+ FileList.Free;
+ end;
+ ReSortFileName(ImageSavePath+CaseID+'\'+DocDir+'\');
+ {for i := ContextList.Count - 1 downto 0 do
+ begin
+ FName := ContextList.Strings[i];
+ if FormID = 'Err' then //刪未註冊文件
+ begin
+ If not FormIDExists(FileName2FormCode(FName),False,0) Then
+ begin
+ DeleteFile(Path+FName);
+ ContextList.Delete(i);
+ end;
+ end
+ Else
+ begin
+ If FormID = FileName2FormCode(FName) then
+ begin
+ DeleteFile(Path+FName);
+ ContextList.Delete(i);
+ end;
+ end;
+ end;
+ ContextList.SaveToFile(Path+'Context.dat');
+ ReSortFileName(Path); }
+end;
+
+
+{ ==============================================================================
+ 方法名稱:DeleteDocNoFile
+ 引用相依:DeleteDocNoFile, FileExists, LoadFromFile, ReSortFileName, SaveToFil
+ e
+ 方法描述:刪除指定的文件編號(DocNo)影像。遍歷 ContextList,比對文件編號後執行實
+ 體刪除與清單移除(含 Context 與 Context_DocNo)。處理完成後執行檔案重新
+ 排序並重新載入清單。
+============================================================================== }
+Function TCB_IMGPSScanX.DeleteDocNoFile(Path,DocNo:String):Boolean; //刪除指定DocNo文件
+var
+ i: Integer;
+ FName : String;
+begin
+ Result := False;
+ for i := ContextList.Count - 1 downto 0 do
+ begin
+ FName := ContextList.Strings[i];
+ If DocNo = FormCode2DocNo(FileName2FormCode(FName)) then
+ begin
+ DeleteFile(Path+FName);
+ ContextList.Delete(i);
+ Context_DocnoList.Delete(i);
+ Result := True; //有刪到指定文件
+ end;
+ end;
+ ContextList.SaveToFile(Path+'Context.dat');
+ Context_DocnoList.SaveToFile(Path+'Context_DocNo.dat');
+ ReSortFileName(Path);
+ ContextList.LoadFromFile(Path+'Context.dat');
+ Context_DocnoList.LoadFromFile(Path+'Context_DocNo.dat');
+ if FileExists(Path+'CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(Path+'CustomDocNo.dat');
+end;
+
+
+{ ==============================================================================
+ 方法名稱:DeleteDocNoFileForESCAN
+ 引用相依:DeleteDocNoFile, LoadFromFile, SaveToFile, _DelTree
+ 方法描述:在補件模式 (ESCAN) 下刪除屬於特定文件類型 (DocNo) 的影像。方法會從索
+ 引清單 (ContextList) 的末尾開始向前遍歷,識別符合目標文件編號或附件名
+ 稱的圖檔。若該檔案並非預先存在的(ISExistImg 返回 False),則執行實體刪
+ 除並從索引清單中移除。若整個文件目錄因此清空,則會進一步移除該目錄並從
+ 文件清單中刪除紀錄。
+============================================================================== }
+Function TCB_IMGPSScanX.DeleteDocNoFileForESCAN(Path,DocNo:String):Boolean; //刪除指定DocNo文件
+var
+ i,j,k: Integer;
+ FName : String;
+ ST1,ST2,ST3:TStringList;
+
+begin
+
+ Result := False;
+//ShowMessage(DocNo);
+ for i := ContextList.Count - 1 downto 0 do
+ begin
+ FName := ContextList.Strings[i];
+ If (DocNo = FormCode2DocNo(FileName2FormCode(FName))) or (DocNo=AttName) then
+ begin
+ if not ISExistImg(Path+'\'+FName) then
+ begin
+ DeleteFile(Path+'\'+FName);
+ ContextList.Delete(i);
+ end;
+ Result := True; //有刪到指定文件
+ end;
+ end;
+ ContextList.SaveToFile(Path+'\Context.dat');
+ ContextList.LoadFromFile(Path+'\Context.dat');
+
+ if ContextList.Count=0 then
+ begin
+ _DelTree(Path);
+ SetDocNoList('D',-1,NowCaseNo,NowDocDir,'');
+ end;
+
+end;
+
+
+{ ==============================================================================
+ 方法名稱:DeleteShowFile
+ 引用相依:DeleteShowFile
+ 方法描述:刪除當前顯示清單(NowShowFileList)中的影像檔案並更新索引。
+============================================================================== }
+Procedure TCB_IMGPSScanX.DeleteShowFile(Path:String); //刪除顯示中的影像
+var
+ i : Integer;
+ DelFile : String;
+begin
+ for i := 0 to NowShowFileList.Count - 1 do
+ begin
+ DelFile := NowShowFileList.Strings[i];
+ DeleteFile(Path+DelFile);
+ SetContextList('D',-1,NowCaseno,NowDocNo,DelFile);
+ end;
+
+end;
+
+
+{ ==============================================================================
+ 方法名稱:DeleteCustomDocDir
+ 引用相依:
+ 方法描述:從 CustomDocNo.ini 中刪除指定的自定義文件區段。
+============================================================================== }
+Procedure TCB_IMGPSScanX.DeleteCustomDocDir(Path,DocNo:String); //刪除自定文件DocNo
+var
+ ini : Tinifile;
+begin
+ ini := Tinifile.Create(Path+'CustomDocNo.ini');
+ try
+ ini.EraseSection(DocNo);
+ finally
+ ini.Free;
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:ReSortFileName
+ 引用相依:FileExists, LoadFromFile, ReSortFileName, RenameFile, SaveToFile
+ 方法描述:執行影像檔案名稱的重新排序與更名。讀取目錄下的 Context.dat,根據目前的
+ 排列順序為每個檔案產生新的三位數序號前綴,並呼叫 ReNameFile 執行磁碟
+ 更名,最後同步更新清單內容並儲存。
+============================================================================== }
+Procedure TCB_IMGPSScanX.ReSortFileName(Path:String); //檔名重新排序
+var
+ i : Integer;
+ OldName,NewName : String;
+ Filelist : TStringlist;
+begin
+ Filelist := TStringlist.Create;
+ try
+ if FileExists(Path+'Context.dat') then
+ begin
+ Filelist.LoadFromFile(Path+'Context.dat');
+ for i := 0 to Filelist.Count - 1 do
+ begin
+ OldName := Filelist.Strings[i];
+ //NewName := Add_Zoo(i+1,3)+Copy(OldName,4,length(OldName)-3);
+ NewName := Add_Zoo(i+1,3)+FileName2NoQuene_Filename(OldName);
+//ShowMessage(OldName+#10#13+NewName);
+ ReNameFile(Path+OldName,Path+NewName);
+ Filelist.Strings[i] := NewName;
+ end;
+ Filelist.SaveToFile(Path+'Context.dat');
+ ContextList.LoadFromFile(Path+'Context.dat');
+ end;
+ finally
+ Filelist.Free;
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:ReSortFileName_New
+ 引用相依:FileExists, LoadFromFile, ReSortFileName, RenameFile, SaveToFile
+ 方法描述:與 ReSortFileName 類似,執行影像檔案名稱的重新排序,但採用從清單末尾向
+ 前遍歷的方式執行更名與儲存。
+============================================================================== }
+Procedure TCB_IMGPSScanX.ReSortFileName_New(Path:String); //檔名重新排序
+var
+ i : Integer;
+ OldName,NewName : String;
+ Filelist : TStringlist;
+begin
+ Filelist := TStringlist.Create;
+ try
+ if FileExists(Path+'Context.dat') then
+ begin
+ Filelist.LoadFromFile(Path+'Context.dat');
+ for i := Filelist.Count - 1 downto 0 do
+ begin
+ OldName := Filelist.Strings[i];
+ //NewName := Add_Zoo(i+1,3)+Copy(OldName,4,length(OldName)-3);
+ NewName := Add_Zoo(i+1,3)+FileName2NoQuene_Filename(OldName);
+ ReNameFile(Path+OldName,Path+NewName);
+ Filelist.Strings[i] := NewName;
+ end;
+ Filelist.SaveToFile(Path+'Context.dat');
+ ContextList.LoadFromFile(Path+'Context.dat');
+ end;
+ finally
+ Filelist.Free;
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:ReSortFileName2Scanlist
+ 引用相依:FileExists, LoadFromFile, ReSortFileName, RenameFile, SaveToFile
+ 方法描述:針對 scanlist.dat 檔案內的影像路徑進行序號重排。讀取清單後,依序為檔案
+ 名稱加上新的序號前綴並存回。
+============================================================================== }
+Procedure TCB_IMGPSScanX.ReSortFileName2Scanlist(Path:String); //檔名重新排序給Scanlist.dat
+var
+ i : Integer;
+ OldName,NewName : String;
+ S : TStringlist;
+begin
+ S := TStringlist.Create;
+ try
+ if FileExists(Path+'scanlist.dat') then
+ S.LoadFromFile(Path+'scanlist.dat');
+ for i := 0 to S.Count - 1 do
+ begin
+ OldName := S.Strings[i];
+ //NewName := Add_Zoo(i+1,3)+Copy(OldName,4,length(OldName)-3);
+ NewName := Add_Zoo(i+1,3)+FileName2NoQuene_Filename(OldName);
+ //ReNameFile(Path+OldName,Path+NewName);
+ S.Strings[i] := NewName;
+ end;
+ S.SaveToFile(Path+'scanlist.dat');
+ finally
+ S.Free;
+ end;
+end;
+
+
+
--
Gitblit v1.8.0