OSDN Git Service

Add new tools for encoding literal messages into UTF-8.
[ffftp/ffftp.git] / local.c
1 /*=============================================================================\r
2 *\r
3 *                                               ローカル側のファイルアクセス\r
4 *\r
5 ===============================================================================\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.\r
7 /\r
8 / Redistribution and use in source and binary forms, with or without \r
9 / modification, are permitted provided that the following conditions \r
10 / are met:\r
11 /\r
12 /  1. Redistributions of source code must retain the above copyright \r
13 /     notice, this list of conditions and the following disclaimer.\r
14 /  2. Redistributions in binary form must reproduce the above copyright \r
15 /     notice, this list of conditions and the following disclaimer in the \r
16 /     documentation and/or other materials provided with the distribution.\r
17 /\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR \r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES \r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, \r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, \r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF \r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF \r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
28 /============================================================================*/\r
29 \r
30 #define STRICT\r
31 // IPv6対応\r
32 #include <winsock2.h>\r
33 #include <windows.h>\r
34 #include <stdio.h>\r
35 #include <stdlib.h>\r
36 #include <direct.h>\r
37 #include <string.h>\r
38 #include <windowsx.h>\r
39 \r
40 #include "common.h"\r
41 #include "resource.h"\r
42 \r
43 \r
44 \r
45 /*----- ローカル側のディレクトリ変更 -------------------------------------------\r
46 *\r
47 *       Parameter\r
48 *               char *Path : パス名\r
49 *\r
50 *       Return Value\r
51 *               int ステータス\r
52 *                       FFFTP_SUCCESS/FFFTP_FAIL\r
53 *----------------------------------------------------------------------------*/\r
54 \r
55 int DoLocalCWD(char *Path)\r
56 {\r
57         int Sts;\r
58 \r
59         Sts = FFFTP_SUCCESS;\r
60         SetTaskMsg(">>CD %s", Path);\r
61         if(SetCurrentDirectory(Path) != TRUE)\r
62         {\r
63                 SetTaskMsg(MSGJPN145);\r
64                 Sts = FFFTP_FAIL;\r
65         }\r
66         return(Sts);\r
67 }\r
68 \r
69 \r
70 /*----- ローカル側のディレクトリ作成 -------------------------------------------\r
71 *\r
72 *       Parameter\r
73 *               char *Path : パス名\r
74 *\r
75 *       Return Value\r
76 *               なし\r
77 *----------------------------------------------------------------------------*/\r
78 \r
79 void DoLocalMKD(char *Path)\r
80 {\r
81         SetTaskMsg(">>MKDIR %s", Path);\r
82         if(_mkdir(Path) != 0)\r
83                 SetTaskMsg(MSGJPN146);\r
84         return;\r
85 }\r
86 \r
87 \r
88 /*----- ローカル側のカレントディレクトリ取得 -----------------------------------\r
89 *\r
90 *       Parameter\r
91 *               char *Buf : パス名を返すバッファ\r
92 *\r
93 *       Return Value\r
94 *               なし\r
95 *----------------------------------------------------------------------------*/\r
96 \r
97 void DoLocalPWD(char *Buf)\r
98 {\r
99         if(GetCurrentDirectory(FMAX_PATH, Buf) == 0)\r
100                 strcpy(Buf, "");\r
101         return;\r
102 }\r
103 \r
104 \r
105 /*----- ローカル側のディレクトリ削除 ------------------------------------------\r
106 *\r
107 *       Parameter\r
108 *               char *Path : パス名\r
109 *\r
110 *       Return Value\r
111 *               なし\r
112 *----------------------------------------------------------------------------*/\r
113 \r
114 void DoLocalRMD(char *Path)\r
115 {\r
116 #if 0\r
117         SetTaskMsg(">>RMDIR %s", Path);\r
118         if(rmdir(Path) != 0)\r
119                 SetTaskMsg(MSGJPN147);\r
120 #else\r
121         SetTaskMsg(">>RMDIR %s", Path);\r
122 \r
123         if(MoveFileToTrashCan(Path) != 0)\r
124                 SetTaskMsg(MSGJPN148);\r
125 #endif\r
126         return;\r
127 }\r
128 \r
129 \r
130 /*----- ローカル側のファイル削除 -----------------------------------------------\r
131 *\r
132 *       Parameter\r
133 *               char *Path : パス名\r
134 *\r
135 *       Return Value\r
136 *               なし\r
137 *----------------------------------------------------------------------------*/\r
138 \r
139 void DoLocalDELE(char *Path)\r
140 {\r
141 #if 0\r
142         SetTaskMsg(">>DEL %s", Path);\r
143         if(DeleteFile(Path) != TRUE)\r
144                 SetTaskMsg(MSGJPN149);\r
145 #else\r
146         SetTaskMsg(">>DEL %s", Path);\r
147 \r
148         if(MoveFileToTrashCan(Path) != 0)\r
149                 SetTaskMsg(MSGJPN150);\r
150 #endif\r
151         return;\r
152 }\r
153 \r
154 \r
155 /*----- ローカル側のファイル名変更 ---------------------------------------------\r
156 *\r
157 *       Parameter\r
158 *               char *Src : 元ファイル名\r
159 *               char *Dst : 変更後のファイル名\r
160 *\r
161 *       Return Value\r
162 *               なし\r
163 *----------------------------------------------------------------------------*/\r
164 \r
165 void DoLocalRENAME(char *Src, char *Dst)\r
166 {\r
167         SetTaskMsg(">>REN %s %s", Src, Dst);\r
168         if(MoveFile(Src, Dst) != TRUE)\r
169                 SetTaskMsg(MSGJPN151);\r
170         return;\r
171 }\r
172 \r
173 \r
174 /*----- ファイルのプロパティを表示する ----------------------------------------\r
175 *\r
176 *       Parameter\r
177 *               char *Fname : ファイル名\r
178 *\r
179 *       Return Value\r
180 *               なし\r
181 *----------------------------------------------------------------------------*/\r
182 \r
183 void DispFileProperty(char *Fname)\r
184 {\r
185         SHELLEXECUTEINFO sInfo;\r
186         // 異なるファイルが表示されるバグ修正\r
187         char Fname2[FMAX_PATH+1];\r
188 \r
189         memset(&sInfo, NUL, sizeof(SHELLEXECUTEINFO));\r
190         sInfo.cbSize = sizeof(SHELLEXECUTEINFO);\r
191         sInfo.fMask = SEE_MASK_INVOKEIDLIST;\r
192         sInfo.hwnd = NULL;              //GetMainHwnd();\r
193         sInfo.lpVerb = "Properties";\r
194         // 異なるファイルが表示されるバグ修正\r
195 //      sInfo.lpFile = Fname;\r
196         sInfo.lpFile = MakeDistinguishableFileName(Fname2, Fname);\r
197         sInfo.lpParameters = NULL;\r
198         sInfo.lpDirectory = NULL;\r
199         sInfo.nShow = SW_NORMAL;\r
200         sInfo.lpIDList = NULL;\r
201         ShellExecuteEx(&sInfo);\r
202         return;\r
203 }\r
204 \r
205 \r
206 /*----- 属性をチェックする FindFirstFile --------------------------------------\r
207 *\r
208 *       Parameter\r
209 *               char *Fname : ファイル名\r
210 *               WIN32_FIND_DATA *FindData : 検索データ\r
211 *               int IgnHide : 隠しファイルを無視するかどうか(YES/NO)\r
212 *\r
213 *       Return Value\r
214 *               HANDLE ハンドル\r
215 *----------------------------------------------------------------------------*/\r
216 \r
217 HANDLE FindFirstFileAttr(char *Fname, WIN32_FIND_DATA *FindData, int IgnHide)\r
218 {\r
219         HANDLE hFind;\r
220 \r
221         if((hFind = FindFirstFile(Fname, FindData)) != INVALID_HANDLE_VALUE)\r
222         {\r
223                 if(IgnHide == YES)\r
224                 {\r
225                         while(FindData->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)\r
226                         {\r
227                                 if(FindNextFile(hFind, FindData) == FALSE)\r
228                                 {\r
229                                         FindClose(hFind);\r
230                                         hFind = INVALID_HANDLE_VALUE;\r
231                                         break;\r
232                                 }\r
233                         }\r
234                 }\r
235         }\r
236         return(hFind);\r
237 }\r
238 \r
239 \r
240 /*----- 属性をチェックする FindNextFile ---------------------------------------\r
241 *\r
242 *       Parameter\r
243 *               HANDLE hFind : ハンドル\r
244 *               WIN32_FIND_DATA *FindData : 検索データ\r
245 *               int IgnHide : 隠しファイルを無視するかどうか(YES/NO)\r
246 *\r
247 *       Return Value\r
248 *               HANDLE ハンドル\r
249 *----------------------------------------------------------------------------*/\r
250 \r
251 BOOL FindNextFileAttr(HANDLE hFind, WIN32_FIND_DATA *FindData, int IgnHide)\r
252 {\r
253         BOOL Ret;\r
254 \r
255         while((Ret = FindNextFile(hFind, FindData)) == TRUE)\r
256         {\r
257                 if(IgnHide == NO)\r
258                         break;\r
259                 if((FindData->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == 0)\r
260                         break;\r
261         }\r
262         return(Ret);\r
263 }\r
264 \r
265 \r