source: trunk/src/shell32/shlfileop.c@ 5087

Last change on this file since 5087 was 4121, checked in by sandervl, 25 years ago

complete merge with shell32 from wine 20000801

File size: 4.0 KB
Line 
1/* $Id: shlfileop.c,v 1.1 2000-08-30 13:52:57 sandervl Exp $ */
2/*
3 * SHFileOperation
4 */
5#ifdef __WIN32OS2__
6#define ICOM_CINTERFACE 1
7#include <odin.h>
8#endif
9#include <string.h>
10#include "debugtools.h"
11#include "shellapi.h"
12#include "shell32_main.h"
13
14#include "shlobj.h"
15#include "shresdef.h"
16#include "wine/undocshell.h"
17
18DEFAULT_DEBUG_CHANNEL(shell);
19
20#define ASK_DELETE_FILE 1
21#define ASK_DELETE_FOLDER 2
22#define ASK_DELETE_MULTIPLE_FILE 3
23
24static BOOL SHELL_WarnFolderDelete (int nKindOfDialog, LPCSTR szDir)
25{
26 char szCaption[255], szText[255], szBuffer[MAX_PATH + 256];
27
28 LoadStringA(shell32_hInstance, IDS_DELETEFOLDER_TEXT, szText, sizeof(szText));
29 LoadStringA(shell32_hInstance, IDS_DELETEFOLDER_CAPTION, szCaption, sizeof(szCaption));
30 FormatMessageA(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY,
31 szText, 0, 0, szBuffer, sizeof(szBuffer), (DWORD*)&szDir);
32
33 return (IDOK == MessageBoxA(GetActiveWindow(), szBuffer, szCaption, MB_OKCANCEL | MB_ICONEXCLAMATION));
34}
35
36/**************************************************************************
37 * SHELL_DeleteDirectoryA()
38 *
39 * like rm -r
40 */
41
42BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir, BOOL bShowUI)
43{
44 BOOL ret = FALSE;
45 HANDLE hFind;
46 WIN32_FIND_DATAA wfd;
47 char szTemp[MAX_PATH];
48
49 strcpy(szTemp, pszDir);
50 PathAddBackslashA(szTemp);
51 strcat(szTemp, "*.*");
52
53 if (bShowUI && !SHELL_WarnFolderDelete(ASK_DELETE_FOLDER, pszDir)) return FALSE;
54
55 if(INVALID_HANDLE_VALUE != (hFind = FindFirstFileA(szTemp, &wfd)))
56 {
57 do
58 {
59 if(strcasecmp(wfd.cFileName, ".") && strcasecmp(wfd.cFileName, ".."))
60 {
61 strcpy(szTemp, pszDir);
62 PathAddBackslashA(szTemp);
63 strcat(szTemp, wfd.cFileName);
64
65 if(FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes)
66 SHELL_DeleteDirectoryA(szTemp, FALSE);
67 else
68 DeleteFileA(szTemp);
69 }
70 } while(FindNextFileA(hFind, &wfd));
71
72 FindClose(hFind);
73 ret = RemoveDirectoryA(pszDir);
74 }
75
76 return ret;
77}
78
79/*************************************************************************
80 * SHCreateDirectory [SHELL32.165]
81 *
82 * NOTES
83 * exported by ordinal
84 * not sure about LPSECURITY_ATTRIBUTES
85 */
86DWORD WINAPI SHCreateDirectory(LPSECURITY_ATTRIBUTES sec,LPCSTR path)
87{
88 DWORD ret;
89 TRACE("(%p,%s)\n",sec,path);
90 if ((ret = CreateDirectoryA(path,sec)))
91 {
92 SHChangeNotifyA(SHCNE_MKDIR, SHCNF_PATHA, path, NULL);
93 }
94 return ret;
95}
96
97/************************************************************************
98 * Win32DeleteFile [SHELL32.164]
99 *
100 * Deletes a file. Also triggers a change notify if one exists.
101 *
102 * FIXME:
103 * Verified on Win98 / IE 5 (SHELL32 4.72, March 1999 build) to be
104 * ANSI. Is this Unicode on NT?
105 *
106 */
107
108BOOL WINAPI Win32DeleteFile(LPSTR fName)
109{
110 TRACE("%p(%s)\n", fName, fName);
111
112 DeleteFileA(fName);
113 SHChangeNotifyA(SHCNE_DELETE, SHCNF_PATHA, fName, NULL);
114 return TRUE;
115}
116
117/*************************************************************************
118 * SHFileOperationA [SHELL32.243]
119 *
120 * NOTES
121 * exported by name
122 */
123DWORD WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp)
124{
125 FIXME("(%p):stub.\n", lpFileOp);
126 return 1;
127}
128
129/*************************************************************************
130 * SHFileOperationW [SHELL32.244]
131 *
132 * NOTES
133 * exported by name
134 */
135DWORD WINAPI SHFileOperationW (LPSHFILEOPSTRUCTW lpFileOp)
136{
137 FIXME("(%p):stub.\n", lpFileOp);
138 return 1;
139}
140
141/*************************************************************************
142 * SHFileOperation [SHELL32.242]
143 *
144 */
145DWORD WINAPI SHFileOperationAW(LPVOID lpFileOp)
146{
147 if (SHELL_OsIsUnicode())
148 return SHFileOperationW(lpFileOp);
149 return SHFileOperationA(lpFileOp);
150}
151
152/*************************************************************************
153 * SheGetDirW [SHELL32.281]
154 *
155 */
156HRESULT WINAPI SheGetDirW(LPWSTR u, LPWSTR v)
157{ FIXME("%p %p stub\n",u,v);
158 return 0;
159}
160
161/*************************************************************************
162 * SheChangeDirW [SHELL32.274]
163 *
164 */
165HRESULT WINAPI SheChangeDirW(LPWSTR u)
166{ FIXME("(%s),stub\n",debugstr_w(u));
167 return 0;
168}
169
Note: See TracBrowser for help on using the repository browser.