|
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,
|
|
|
|
|
Thanks Don!
It works! Cool!
regards,
George
|
|
|
|
|
Hi
I was just looking at your problem and why not try someting completely different.
You could create a batch file which deletes the files within a folder.
1. Create a new text file for writing to (say on your c:\) with the extension of ".BAT"
2. Write to that file the path of the directory you want to delete, fprintf(cfile,"del %s\*.*",pathname)
3. Close the file
4. Using the SPOOL command run the file.
Just a quick solution to your problem.
Bry.
|
|
|
|
|
Thanks Bryster,
I need to implement through Windows API to be more efficient.
regards,
George
|
|
|
|
|
Are you sure that those files are not read only.
As once i wasalso facing the same problem but after checking out read only attribute. it was working fine...
Who am I?
Do you know me....
|
|
|
|
|
George_George wrote: I am using the following program to delete all files in a specified directory.
Why not just use SHFileOperation() ?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Sure, gvisgr8. I have enough privilege.
regards,
George
|
|
|
|
|
Because I suspect on Windows Mobile it is not supported -- I need to write program for both Windows desktop and Window CE.
regards,
George
|
|
|
|
|
George_George wrote: Sure, gvisgr8.
I'm not gvisgr8.
George_George wrote: I have enough privilege.
I was not concerned with privileges. I was simply suggesting replacing dozens of lines of code with a single one.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
How?
DavidCrow wrote: I was simply suggesting replacing dozens of lines of code with a single one.
regards,
George
|
|
|
|
|
George_George wrote: How?
By using SHFileOperation() instead.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|