source: dev/trunk/ab5.0/abdev/abdev/Backup.cpp@ 829

Last change on this file since 829 was 829, checked in by イグトランス (egtra), 12 years ago

svn:eol-styleとsvn:mime-type(文字コード指定含む)の設定

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/plain; charset=Shift_JIS
File size: 5.3 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5
6char szBackupDirPath[MAX_PATH];
7
8void CreateBackupDir(void){
9 //自動バックアップ用のフォルダを取得
10 extern char szBackupDirPath[MAX_PATH];
11 GUID guid;
12 char *temp2;
13 CoCreateGuid(&guid);
14 UuidToString(&guid,(unsigned char **)&temp2);
15
16 char temporary[MAX_PATH];
17 GetTempPath(MAX_PATH,temporary);
18 ShortPathToLongPath(temporary,szBackupDirPath);
19 if(szBackupDirPath[lstrlen(szBackupDirPath)-1]!='\\') lstrcat(szBackupDirPath,"\\");
20
21#ifdef THETEXT
22 lstrcat(szBackupDirPath,"TheText_Temporary_");
23#else
24 lstrcat(szBackupDirPath,"abdev_temporary_");
25#endif
26 lstrcat(szBackupDirPath,temp2);
27 RpcStringFree((unsigned char **)&temp2);
28
29 CreateDirectory(szBackupDirPath,NULL);
30 lstrcat(szBackupDirPath,"\\");
31}
32
33
34void backup(void *dummy){
35 extern char szBackupDirPath[MAX_PATH];
36 int i,iNum=0;
37 char temporary[MAX_PATH];
38
39 lstrcpy( temporary, szBackupDirPath );
40 if( temporary[lstrlen(temporary)-1] == '\\' ) temporary[lstrlen(temporary)-1] = 0;
41 if( !IsExistDirectory( temporary ) ){
42 //バックアップ用一時ディレクトリが存在しないときは作る
43 CreateDirectory( temporary, NULL );
44 }
45
46 char *temp2;
47 temp2=(char *)malloc(8192);
48 sprintf(temp2,"%x\r\n",hOwner);
49
50 for(i=0;i<MdiInfo.size();i++){
51 if(MdiInfo[i]->hwnd){
52 int WndNum;
53 WndNum=i;
54
55 if(!IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)) continue;
56
57 //ファイルを保存
58 sprintf(temporary,"%sdocument%02d.txt",szBackupDirPath,iNum);
59 WriteBuffer(temporary,MdiInfo[WndNum]->pMdiTextEdit->buffer,lstrlen(MdiInfo[WndNum]->pMdiTextEdit->buffer), false);
60
61 //情報を追加
62 sprintf(temp2+lstrlen(temp2),"%s\r\n",MdiInfo[WndNum]->path.c_str());
63
64 iNum++;
65 }
66 }
67
68 //バックアップヘッダ
69 sprintf(temporary,"%sinfo.txt",szBackupDirPath);
70 WriteBuffer_NonErrMsg(temporary,temp2,lstrlen(temp2));
71
72 free(temp2);
73}
74
75
76void RestoreBeforeState(const char *dir_path,char *pHeaderBuffer){
77 int i,i2;
78 for(i=0;;i++){
79 if(pHeaderBuffer[i]=='\0') break;
80 if(pHeaderBuffer[i]=='\r'&&pHeaderBuffer[i+1]=='\n') break;
81 }
82 if(pHeaderBuffer[i]=='\0') return;
83 i+=2;
84
85
86 int iDocNum=0;
87 char temporary[MAX_PATH];
88 while(1){
89 //元のファイルパスを取得
90 char szBeforeFilePath[MAX_PATH];
91 for(i2=0;;i++,i2++){
92 if(pHeaderBuffer[i]=='\r'&&pHeaderBuffer[i+1]=='\n'){
93 szBeforeFilePath[i2]=0;
94 break;
95 }
96 szBeforeFilePath[i2]=pHeaderBuffer[i];
97 if(pHeaderBuffer[i]=='\0') break;
98 }
99 if(pHeaderBuffer[i]=='\0') break;
100
101 sprintf(temporary,"%sdocument%02d.txt",dir_path,iDocNum);
102
103 HWND hChild;
104 hChild=NewTextEditWindow(temporary,WNDTYPE_TEXT);
105 int WndNum;
106 WndNum=GetWndNum(hChild);
107
108 char szOldTitle[MAX_PATH];
109 lstrcpy(szOldTitle,MdiInfo[WndNum]->title.c_str());
110
111 //ドキュメント セレクト コンボボックスから消去
112 extern HWND hDocCombo;
113 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(LPARAM)MdiInfo[WndNum]->title.c_str());
114 SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
115
116 //パスを変更
117 MdiInfo[WndNum]->path = szBeforeFilePath;
118
119 //ドキュメント セレクト コンボボックスに挿入
120 char str[MAX_PATH],str2[MAX_PATH];
121 if(szBeforeFilePath[0]){
122 _splitpath(szBeforeFilePath,NULL,NULL,str,str2);
123 lstrcat(str,str2);
124 }
125 else{
126 extern int DocumentCounter;
127 DocumentCounter++;
128 sprintf(str,"Document[%d]",DocumentCounter);
129 }
130 DuplicateTitleCheck(str);
131 MdiInfo[WndNum]->title = str;
132 SendMessage(hDocCombo,CB_ADDSTRING,0,(long)MdiInfo[WndNum]->title.c_str());
133 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum]->title.c_str());
134 SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
135
136 //MDIウィンドウのタイトルを再設定
137 SetWindowText(hChild,MdiInfo[WndNum]->title.c_str());
138
139 //タブコントロールを再設定
140 COLORREF TabColor;
141 TabColor=pobj_nv->pobj_ExtLink->GetTabColorFromFilePath(MdiInfo[WndNum]->path);
142 pobj_MainTab->DeleteItem( szOldTitle, false );
143 pobj_MainTab->InsertItem( hChild, MdiInfo[WndNum]->title.c_str(), false, TabColor );
144
145 MdiInfo[WndNum]->pMdiTextEdit->Modify();
146
147
148 iDocNum++;
149
150 i+=2;
151 if(pHeaderBuffer[i]=='\0') break;
152 }
153
154 RemoveDirectoryStrong(dir_path);
155}
156
157
158BOOL restore(void){
159 HANDLE hFind;
160 WIN32_FIND_DATA wfd;
161 char temporary[MAX_PATH],*temp2;
162
163 char szTempPath[MAX_PATH];
164 GetTempPath(MAX_PATH,temporary);
165 ShortPathToLongPath(temporary,szTempPath);
166 if(szTempPath[lstrlen(szTempPath)-1]!='\\') lstrcat(szTempPath,"\\");
167
168 sprintf(temporary,"%s*",szTempPath);
169 hFind=FindFirstFile(temporary,&wfd);
170 if(hFind!=INVALID_HANDLE_VALUE){
171 do{
172 if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
173#ifdef THETEXT
174 if(memcmp(wfd.cFileName,"TheText_Temporary_",18)==0){
175#else
176 if(memcmp(wfd.cFileName,"abdev_temporary_",16)==0){
177#endif
178 sprintf(temporary,"%s%s\\info.txt",szTempPath,wfd.cFileName);
179 temp2=ReadBuffer_NonErrMsg(temporary);
180 if(temp2){
181 HWND hTemp;
182 sscanf(temp2,"%x",&hTemp);
183 if(!IsWindow(hTemp)){
184 sprintf(temporary,"前回、%sが異常終了した可能性があります。データを復元しますか?",APPLICATION_NAME);
185 if(MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNO)==IDNO){
186 HeapDefaultFree(temp2);
187
188 sprintf(temporary,"%s%s\\",szTempPath,wfd.cFileName);
189 RemoveDirectoryStrong(temporary);
190 return 0;
191 }
192
193 sprintf(temporary,"%s%s\\",szTempPath,wfd.cFileName);
194 RestoreBeforeState(temporary,temp2);
195
196 HeapDefaultFree(temp2);
197
198 return 1;
199 }
200
201 HeapDefaultFree(temp2);
202 }
203 }
204 }
205 }while(FindNextFile(hFind,&wfd));
206 }
207
208 return 0;
209}
Note: See TracBrowser for help on using the repository browser.