|
Thank you, that sounds like a good idea.
|
|
|
|
|
Hi
I have recently upgraded from Windows 2000 to Windows XP Professional and have noticed that when I run my applications the progress bar stops and the application looks as if it has crashed, but after a while finishes.
I have Mcafee Virus protection running in the background, is this causing the problem?
The code is a simple "UpdateData(FALSE)" instruction after setting the ProgressBar.SetPos() which is looping until an EOF instruction.
Any Ideas?
Thank you in advance
Brian.
|
|
|
|
|
1. Disable McAfee and observe the result.
2. Put a ProgressBar.RedrawWindow(); after the UpdateData(FALSE); and observe the result.
|
|
|
|
|
Unfortunately this has not solved the problem.
Thanks for trying.
|
|
|
|
|
After your UpdateData(FALSE) add a
ProgressBar.UpdateWindow()
I believe that will solve your problem.
Hope that helps.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
Why do you need to call UpdateData? Are other controls changing or just the progress control?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hello everyone,
I am using the following program to delete all files in a specified directory. But when running, no files could be deleted, and the related error information is,
failed with error 5 -- access denied. Anything wrong with the program?
<br />
remove_non_empty_directory ("c:\\temp\\non_empty_dir\\*");<br />
<br />
<br />
int remove_non_empty_directory (const char* path)<br />
{<br />
<br />
WIN32_FIND_DATA FindFileData;<br />
HANDLE hFind;<br />
int rtn;<br />
<br />
hFind = FindFirstFile(path, &FindFileData);<br />
if (hFind == INVALID_HANDLE_VALUE) <br />
{<br />
FindClose(hFind);<br />
return -1;<br />
} <br />
else <br />
{<br />
rtn = DeleteFile(&(FindFileData.cFileName));<br />
<br />
if (0 == rtn)<br />
{<br />
ErrorExit (NULL);<br />
}<br />
<br />
while (FindNextFile(hFind, &FindFileData) != 0) <br />
{<br />
rtn = DeleteFile(&(FindFileData.cFileName));<br />
}<br />
<br />
FindClose(hFind);<br />
}<br />
<br />
return 0;<br />
<br />
}<br />
thanks in advance,
George
|
|
|
|
|
Do you have permissions to delete from that folder, have you tried deleting a file manually through explorer ?
|
|
|
|
|
Sure Jonathan, I have the privilege. I am admin and I can manually delete such files. I think there should be something wrong with my program, but through debugging for almost an hour, I still can not find the reason. Any ideas?
regards,
George
|
|
|
|
|
I think the problem is that the first file you will 'find' is the current folder '.', you will get an access denied if you try to delete this, so you need to exclude both '.' and '..' from your wildcard search, something like this (obviously could be optimised, this is just to show an example):
Also, you could make it recursive if you wanted to delete sub folders too.
int remove_non_empty_directory(const char* path)
{
WIN32_FIND_DATA FindFileData;
int rtn;
HANDLE hFind = FindFirstFile(path, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
FindClose(hFind);
return -1;
}
else
{
bool bDelete = true;
if((_tcsicmp(FindFileData.cFileName, "..") == 0) || (_tcsicmp(FindFileData.cFileName, ".") == 0))
bDelete = false;
if(bDelete)
{
rtn = DeleteFile((LPCSTR)FindFileData.cFileName);
}
while (FindNextFile(hFind, &FindFileData) != 0)
{
bDelete = true;
if((_tcsicmp(FindFileData.cFileName, "..") == 0) || (_tcsicmp(FindFileData.cFileName, ".") == 0))
bDelete = false;
if(bDelete)
rtn = DeleteFile((LPCSTR)FindFileData.cFileName);
FindClose(hFind);
}
return 0;
}
And change this code:
DeleteFile(&(FindFileData.cFileName));
to this:
DeleteFile((LPCSTR)FindFileData.cFileName);
regards,
-- modified at 7:09 Monday 30th July, 2007
|
|
|
|
|
Thanks Jonathan,
I have tried and slightly modified your program to make it compile.
Now the error condition is, error number 2 -- system can not find specified file. I am confused since the file actually exists.
I need to using absolute path other than relative path to delete the file?
<br />
int remove_non_empty_directory(const char* path)<br />
{<br />
WIN32_FIND_DATA FindFileData;<br />
int rtn;<br />
HANDLE hFind = FindFirstFile(path, &FindFileData);<br />
int bDelete = 0;<br />
<br />
if (hFind == INVALID_HANDLE_VALUE)<br />
{ <br />
FindClose(hFind);<br />
return -1;<br />
}<br />
else<br />
{<br />
if((_tcscmp((LPCSTR)FindFileData.cFileName, "..") == 0) || (_tcscmp((LPCSTR)FindFileData.cFileName, ".") == 0))<br />
{<br />
bDelete = 0;<br />
}<br />
if(bDelete)
{<br />
rtn = DeleteFile((LPCSTR)FindFileData.cFileName);
}<br />
while (FindNextFile(hFind, &FindFileData) != 0)<br />
{<br />
bDelete = 1;<br />
if((_tcscmp((LPCSTR)FindFileData.cFileName, "..") == 0) || (_tcscmp((LPCSTR)FindFileData.cFileName, ".") == 0))<br />
{<br />
bDelete = 0;<br />
}<br />
if(bDelete)<br />
{<br />
rtn = DeleteFile((LPCSTR)FindFileData.cFileName);<br />
if (0 == rtn)<br />
{<br />
ErrorExit (NULL);<br />
}<br />
}<br />
}<br />
FindClose(hFind);<br />
}<br />
<br />
return 0;<br />
}<br />
regards,
George
|
|
|
|
|
which line is producing error 2, and what is the value of FindFileData.cFileName at that point ?
|
|
|
|
|
Relative file name.
regards,
George
|
|
|
|
|
George_George wrote: I have tried and slightly modified your program to make it compile.
George_George wrote: I need to using absolute path other than relative path to delete the file?
Yes, in this case you should.
regards,
|
|
|
|
|
Thanks Jonathan,
I have tried that if I am using absolute path, it works!
regards,
George
|
|
|
|
|
Try
DeleteFile(FindFileData.cFileName);
instead of
DeleteFile(&(FindFileData.cFileName));
|
|
|
|
|
I have tried and the error is the same. Any further debug ideas?
regards,
George
|
|
|
|
|
George_George wrote: Any further debug ideas?
See my last post regarding '.' and '..'
|
|
|
|
|
Yes, they are the key points.
regards,
George
|
|
|
|
|
I think it happens because FindFile Handle i.e. hFind is open.
I have faced similar issue with CFileFind.Try to delete after you close the handle.
|
|
|
|
|
Hi SandipG,
I have tried that it does not matter.
regards,
George
|
|
|
|
|
Hello George_George, I'll tell u the exact problem u r having and how to rectify it.
Your Code:-------------------------------------------------
int remove_non_empty_directory (const char* path)<br />
{<br />
<br />
WIN32_FIND_DATA FindFileData;<br />
HANDLE hFind;<br />
int rtn;<br />
<br />
hFind = FindFirstFile(path, &FindFileData);<br />
if (hFind == INVALID_HANDLE_VALUE)<br />
{<br />
FindClose(hFind);<br />
return -1;<br />
}<br />
else<br />
{<br />
rtn = <pre>DeleteFile(&(FindFileData.cFileName));</pre><br />
<code>if (0 == rtn)<br />
{<br />
ErrorExit (NULL);<br />
}<br />
<br />
while (FindNextFile(hFind, &FindFileData) != 0)<br />
{<br />
rtn = <pre>DeleteFile(&(FindFileData.cFileName));</pre><br />
<code>}<br />
<br />
FindClose(hFind);<br />
}
----------------------------------------------------------
The problem lies in the highlighted lines. FindFileData.cFileName contains only the FILE NAME, NOT PATH. So the problem. Rectify it by replacing the highlighted lines by DeleteFile(path);
Come online at:-
jubinc@skype
|
|
|
|
|
Don Box wrote: Rectify it by replacing the highlighted lines by DeleteFile(path);
That won't work as he is most likely passing in just a folder name, or a folder name with a wildcard attached.
He should take the original path (excluding wildcard) and then add the filename from FindFileData.cFileName and then Delete that.
regards,
|
|
|
|
|
You are always right, Jonathan!
regards,
George
|
|
|
|
|
George_George wrote: You are always right, Jonathan!
Only most of the time
best wishes,
|
|
|
|