findfirstfile and directory lock problem
- From: "seljuk" <seljuk@xxxxxxxxx>
- Date: 23 Aug 2005 06:33:22 -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 and directory lock problem
- From: seljuk
- Re: findfirstfile and directory lock problem
- Prev by Date: [ce42][mshtml] memory leak?
- Next by Date: Re: findfirstfile and directory lock problem
- Previous by thread: Writing an Supplicant config GUI interfacing to the Windows Regist
- Next by thread: Re: findfirstfile and directory lock problem
- Index(es):
Relevant Pages
|