9
hFind=INVALID_HANDLE_VALUE;
19
if (hFind!=INVALID_HANDLE_VALUE)
28
void FindFile::SetMask(const char *FindMask)
30
strcpy(FindFile::FindMask,FindMask);
32
CharToWide(FindMask,FindMaskW);
37
void FindFile::SetMaskW(const wchar *FindMaskW)
41
strcpyw(FindFile::FindMaskW,FindMaskW);
43
WideToChar(FindMaskW,FindMask);
48
bool FindFile::Next(struct FindData *fd,bool GetSymLink)
56
if ((hFind=Win32Find(INVALID_HANDLE_VALUE,FindMask,FindMaskW,fd))==INVALID_HANDLE_VALUE)
60
if (Win32Find(hFind,FindMask,FindMaskW,fd)==INVALID_HANDLE_VALUE)
66
strcpy(DirName,FindMask);
67
RemoveNameFromPath(DirName);
73
int Length=strlen(DirName);
74
if (Length>1 && DirName[Length-1]==CPATHDIVIDER && (Length!=3 || !IsDriveDiv(DirName[1])))
78
if ((dirp=opendir(DirName))==NULL)
80
fd->Error=(errno!=ENOENT);
86
struct dirent *ent=readdir(dirp);
89
if (strcmp(ent->d_name,".")==0 || strcmp(ent->d_name,"..")==0)
91
if (CmpName(FindMask,ent->d_name,MATCH_NAMES))
94
strcpy(FullName,FindMask);
95
strcpy(PointToName(FullName),ent->d_name);
96
if (!FastFind(FullName,NULL,fd,GetSymLink))
98
ErrHandler.OpenErrorMsg(FullName);
101
strcpy(fd->Name,FullName);
107
if (!LowAscii(fd->Name))
108
UtfToWide(fd->Name,fd->NameW,sizeof(fd->NameW));
111
fd->IsDir=IsDir(fd->FileAttr);
113
char *Name=PointToName(fd->Name);
114
if (strcmp(Name,".")==0 || strcmp(Name,"..")==0)
120
bool FindFile::FastFind(const char *FindMask,const wchar *FindMaskW,struct FindData *fd,bool GetSymLink)
124
if (IsWildcard(FindMask,FindMaskW))
128
HANDLE hFind=Win32Find(INVALID_HANDLE_VALUE,FindMask,FindMaskW,fd);
129
if (hFind==INVALID_HANDLE_VALUE)
137
if (lstat(FindMask,&st)!=0)
139
if (stat(FindMask,&st)!=0)
142
fd->Error=(errno!=ENOENT);
147
if (stat(FindMask,&st)!=0)
149
fd->Error=(errno!=ENOENT);
153
fd->FileAttr=chmod(FindMask,0);
155
fd->FileAttr=st.st_attr;
157
fd->FileAttr=st.st_mode;
159
fd->IsDir=IsDir(st.st_mode);
161
fd->mtime=st.st_mtime;
162
fd->atime=st.st_atime;
163
fd->ctime=st.st_ctime;
164
fd->FileTime=fd->mtime.GetDos();
165
strcpy(fd->Name,FindMask);
168
if (!LowAscii(fd->Name))
169
UtfToWide(fd->Name,fd->NameW,sizeof(fd->NameW));
172
fd->IsDir=IsDir(fd->FileAttr);
178
HANDLE FindFile::Win32Find(HANDLE hFind,const char *Mask,const wchar *MaskW,struct FindData *fd)
185
if (MaskW!=NULL && *MaskW!=0)
186
strcpyw(WideMask,MaskW);
188
CharToWide(Mask,WideMask);
190
WIN32_FIND_DATAW FindData;
191
if (hFind==INVALID_HANDLE_VALUE)
193
hFind=FindFirstFileW(WideMask,&FindData);
194
if (hFind==INVALID_HANDLE_VALUE)
196
int SysErr=GetLastError();
197
fd->Error=(SysErr!=ERROR_FILE_NOT_FOUND &&
198
SysErr!=ERROR_PATH_NOT_FOUND &&
199
SysErr!=ERROR_NO_MORE_FILES);
203
if (!FindNextFileW(hFind,&FindData))
205
hFind=INVALID_HANDLE_VALUE;
206
fd->Error=GetLastError()!=ERROR_NO_MORE_FILES;
209
if (hFind!=INVALID_HANDLE_VALUE)
211
strcpyw(fd->NameW,WideMask);
212
strcpyw(PointToName(fd->NameW),FindData.cFileName);
213
WideToChar(fd->NameW,fd->Name);
214
fd->Size=int32to64(FindData.nFileSizeHigh,FindData.nFileSizeLow);
215
fd->FileAttr=FindData.dwFileAttributes;
216
fd->ftCreationTime=FindData.ftCreationTime;
217
fd->ftLastAccessTime=FindData.ftLastAccessTime;
218
fd->ftLastWriteTime=FindData.ftLastWriteTime;
219
fd->mtime=FindData.ftLastWriteTime;
220
fd->ctime=FindData.ftCreationTime;
221
fd->atime=FindData.ftLastAccessTime;
222
fd->FileTime=fd->mtime.GetDos();
225
if (LowAscii(fd->NameW))
234
if (Mask!=NULL && *Mask!=0)
235
strcpy(CharMask,Mask);
237
WideToChar(MaskW,CharMask);
239
WIN32_FIND_DATA FindData;
240
if (hFind==INVALID_HANDLE_VALUE)
242
hFind=FindFirstFile(CharMask,&FindData);
243
if (hFind==INVALID_HANDLE_VALUE)
245
int SysErr=GetLastError();
246
fd->Error=SysErr!=ERROR_FILE_NOT_FOUND && SysErr!=ERROR_PATH_NOT_FOUND;
250
if (!FindNextFile(hFind,&FindData))
252
hFind=INVALID_HANDLE_VALUE;
253
fd->Error=GetLastError()!=ERROR_NO_MORE_FILES;
256
if (hFind!=INVALID_HANDLE_VALUE)
258
strcpy(fd->Name,CharMask);
259
strcpy(PointToName(fd->Name),FindData.cFileName);
260
CharToWide(fd->Name,fd->NameW);
261
fd->Size=int32to64(FindData.nFileSizeHigh,FindData.nFileSizeLow);
262
fd->FileAttr=FindData.dwFileAttributes;
263
fd->ftCreationTime=FindData.ftCreationTime;
264
fd->ftLastAccessTime=FindData.ftLastAccessTime;
265
fd->ftLastWriteTime=FindData.ftLastWriteTime;
266
fd->mtime=FindData.ftLastWriteTime;
267
fd->ctime=FindData.ftCreationTime;
268
fd->atime=FindData.ftLastAccessTime;
269
fd->FileTime=fd->mtime.GetDos();
270
if (LowAscii(fd->Name))