quote:
Originally posted by matty
I did a little testing and noticed a few things.
- Firstly FindFirstFileW and FindNextFileW will find . and .. as well
- I forgot to append the path with slashes
js code:
RemoveDirectory('C:\\Documents and Settings\\__________\\My Documents\\New Folder', true);
function RemoveDirectory(sPath, bFirstFolder) {
sPath='\\\\?\\'+sPath;
var WIN32_FIND_DATA = Interop.Allocate(592);
var hSearch = Interop.Call('kernel32', 'FindFirstFileW', sPath+'\\*', WIN32_FIND_DATA);
var hResult = -1;
var sFile;
while(hResult != 0){
sFile = WIN32_FIND_DATA.ReadString(44);
if (sFile !== '.' && sFile !== '..') {
if(!(WIN32_FIND_DATA.ReadDWORD(0) & 0x10 /* FILE_ATTRIBUTE_DIRECTORY */)){
Debug.Trace(sPath+sFile);
Interop.Call('kernel32', 'DeleteFileW', sPath+'\\'+sFile);
} else {
Debug.Trace(sPath+sFile);
>>> RemoveDirectory(sPath+'\\'+sFile false); <<<
if ( Interop.Call('kernel32', 'RemoveDirectoryW', sPath+'\\'+sFile) === 0 ) TraceWin32Error()
}
}
hResult = Interop.Call('kernel32', 'FindNextFileW', hSearch, WIN32_FIND_DATA)
}
Interop.Call('kernel32', 'FindClose', hSearch);
if (bFirstFolder === true) Interop.Call('kernel32', 'RemoveDirectoryW', sPath)
}
function TraceWin32Error(){
var LastError = Interop.GetLastError();
if(LastError != 0) {
var MsgBuffer = Interop.Allocate(1024);
Interop.Call("Kernel32", "FormatMessageW", 0x1000, 0, LastError, 0, MsgBuffer, 1024, 0);
Debug.Trace(MsgBuffer.ReadString(0));
}
}
No idea if this will work I would have to do a bit more troubleshooting as to why it doesn't.
The highlighted line... should it be like this (with a comma)?
js code:
RemoveDirectory(sPath+'\\'+sFile, false);
Even then...
quote:
Originally posted by JavaScript Debugger
code:
\\?\C:\Documents and Settings\__________\My Documents\My Downloads\Test\
The debug line worked, although I don't know what's with the "\\?\" bit.
js code:
Debug.Trace(sPath+sFile);
However, nothing in the folder was deleted. The folder remained, and so did the files inside.
Although... the "TraceWin32Error()" wasn't called. I suppose that's a good thing.