FindFirstFile
- From: "seljuk" <seljuk@xxxxxxxxx>
- Date: 23 Aug 2005 06:32:06 -0700
I write a code to see files and subdirectories of a directory.
But if a directory has no subdirectory or any file, findClose does not
release directory handle. So I cannot remove that directories.
(It does not enter if block pointed by 4). But filefinddata shows ".."
as cfilename. But handle shows 0xFFFFFF.Although it's value equals to
INVALID_HANDLE_VALUE It has lock over directory that I want to list.
but if there is any file or sub directory in the directory it enters if
block and handle shows valid value and findClose works and releases
lock over the directory.
Note1: I check locks over directories with "Unlocker 1.7.1"
Note2: I work with platform builder and x86 emulator. So I can control
directories on my disk.
SOURCE CODE
void listView::ReadDirectory(LPTSTR dir,HWND listHandle)
{
LPTSTR retVal=(LPTSTR)LocalAlloc(LPTR, 500);
1--> WIN32_FIND_DATA FindFileData;
2--> HANDLE hFind;
retVal=wcscat(retVal,dir);
int listNumber;
if(wcslen(dir)!=0){
insertDefaultDir(listHandle);
listNumber=0;
}else{
listNumber=-1;
}
if(hWnd!=listHandle){
otherList->activeDir=dir;
}else{
activeDir=dir;
}
retVal=wcscat(retVal,_T("\\*.*"));
3--> hFind = FindFirstFile(retVal, &FindFileData);
SendMessage(listHandle,WM_SETREDRAW ,false,NULL);
4--> if(INVALID_HANDLE_VALUE !=hFind)
do
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
listNumber++;
LV_ITEM litem=createListItem(listNumber,FindFileData.cFileName);
ListView_InsertItem(listHandle, &litem);
ListView_SetItemText(listHandle, listNumber, 1, _T("<dir>"));
SYSTEMTIME myTime;
FileTimeToSystemTime(&FindFileData.ftLastWriteTime,&myTime);
LPTSTR dateValue=convertDateToString(myTime);
ListView_SetItemText(listHandle,listNumber,3,dateValue);
LocalFree(dateValue);
}
else if(! (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
{
listNumber++;
int pos=findR(FindFileData.cFileName,'.');
LPTSTR
filename=pos!=-1?mid(FindFileData.cFileName,0,pos):FindFileData.cFileName;
LPTSTR
ext=pos==-1?_T(""):mid(FindFileData.cFileName,pos+1,wcslen(FindFileData.cFileName)-(pos+1));
LV_ITEM litem=createListItem(listNumber,filename);
ListView_InsertItem(listHandle, &litem);
ListView_SetItemText(listHandle, listNumber, 1, ext);
long fileSize=(FindFileData.nFileSizeHigh * MAXDWORD+1) +
FindFileData.nFileSizeLow;
ListView_SetItemText(listHandle,listNumber,2,convertToString(fileSize,10));
SYSTEMTIME myTime;
FileTimeToSystemTime(&FindFileData.ftLastWriteTime,&myTime);
LPTSTR dateValue=convertDateToString(myTime);
ListView_SetItemText(listHandle,listNumber,3,dateValue);
if(pos!=-1){
LocalFree(filename);
LocalFree(ext);
}
LocalFree(dateValue);
}
6 --> }while (FindNextFile(hFind, &FindFileData) != 0);
7--> FindClose(hFind);
LocalFree(retVal);
SendMessage(listHandle,WM_SETREDRAW ,true,NULL);
UpdateWindow(listHandle);
focusedItem=0;
ListView_SetItemState(listHandle,focusedItem,LVIS_FOCUSED
,LVIS_FOCUSED); // select item
}
THANKS IN ADVANCE
.
- Follow-Ups:
- Re: FindFirstFile
- From: David Lowndes
- Re: FindFirstFile
- Prev by Date: Re: "Microsofting" old Borland code
- Next by Date: Re: VerQueryValue returning NULL for JNICALL
- Previous by thread: VerQueryValue returning NULL for JNICALL
- Next by thread: Re: FindFirstFile
- Index(es):
Relevant Pages
|