OSDN Git Service

お気に入りのファイルの置き換えタイミングの変更
authorh677 <h677>
Sun, 24 May 2009 12:37:06 +0000 (12:37 +0000)
committerh677 <h677>
Sun, 24 May 2009 12:37:06 +0000 (12:37 +0000)
一旦一時ファイルに出力した後に、バックアップファイルへの変更、
正式ファイル名への置き換えを実施するようにした。

Favorite.pas

index 0b7bfa7..3a94a1a 100644 (file)
@@ -425,31 +425,47 @@ end;
 
 procedure TFavoriteDM.WriteFavorite;
 var
-       FileName, tmpFileName: string;
+       FileName, tmpFileName, bakFileName: string;
        SaveList: TStringList;
-
+    Buffer: array[0..MAX_PATH] of Char;   // \83o\83b\83t\83@
+    FileRep : Boolean;
 begin
     FavoriteDM.Modified := true;
        FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
-       if FileExists(FileName) then begin
-               tmpFileName := GikoSys.GetConfigDir + '~' + FAVORITE_FILE_NAME;
-               if FileExists(tmpFileName) then
-                       SysUtils.DeleteFile(tmpFileName); //SysUtils.\82ð\82Â\82¯\82È\82¢\82ÆWinAPI\82Æ\8bæ\95Ê\82Å\82«\82È\82¢\82Ì\82Å
-               RenameFile(FileName, tmpFileName);
-       end;
        SaveList := TStringList.Create;
-       try
-               SaveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
-               SaveList.Add('<favorite>');
-               try
-                       AddSaveString(TreeView.Items.GetFirstNode.getFirstChild, SaveList);
-               except
-               end;
-               SaveList.Add('</favorite>');
-               SaveList.SaveToFile(FileName);
-       finally
-               SaveList.Free;
-       end;
+    tmpFileName := '';
+    // \8f\91\82«\8d\9e\82Ý\97p\88ê\8e\9e\83t\83@\83C\83\8b\8eæ\93¾
+    if GetTempFileName(PChar(GikoSys.GetConfigDir), PChar('fav'), 0, Buffer) <> 0 then begin
+        tmpFileName := Buffer;
+        try
+            try
+                SaveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
+                SaveList.Add('<favorite>');
+                AddSaveString(TreeView.Items.GetFirstNode.getFirstChild, SaveList);
+                SaveList.Add('</favorite>');
+                // \88ê\8e\9e\83t\83@\83C\83\8b\82Æ\82µ\82Ä\95Û\91
+                SaveList.SaveToFile(tmpFileName);
+                FileRep := True;
+                // \91O\82Ì\83t\83@\83C\83\8b\82ð\88Ú\93®\82·\82é
+                if FileExists(FileName) then begin
+                    bakFileName := GikoSys.GetConfigDir + '~' + FAVORITE_FILE_NAME;
+                    if FileExists(bakFileName) then begin
+                        FileRep := SysUtils.DeleteFile(bakFileName); //SysUtils.\82ð\82Â\82¯\82È\82¢\82ÆWinAPI\82Æ\8bæ\95Ê\82Å\82«\82È\82¢\82Ì\82Å
+                    end;
+                    if FileRep then begin
+                        FileRep := RenameFile(FileName, bakFileName);
+                    end;
+                end;
+                // \90³\8bK\82Ì\83t\83@\83C\83\8b\96¼\82É\83\8a\83l\81[\83\80\82·\82é
+                if FileRep then begin
+                    FileRep := RenameFile(tmpFileName, FileName);
+                end;
+            except
+            end;
+        finally
+            SaveList.Free;
+        end;
+    end;
 end;
 
 procedure TFavoriteDM.AddSaveString(Node: TTreeNode; SaveList: TStringList);