Hallo Leute!
ICh steh grad ziemlich aufm Schlauch. Ich möchte einen bestimmten Pfad, der mir übergeben wird, komplett löschen. Ich muss ja erst den 1ten Ordner durchsuchen und falls da was drin ist,in den nächsten Ordner gehen usw. bis ich alles löschen kann. Mein Problem ist nun, dass ich die Rekursion nicht hinbekomme. Es muss an einer Kleinigkeit liegen. Das ganze Gerüst steht bereits, nur weiß ich nicht womit ich die Rekursion aufrufen muss. Soll heißen, ich weiß nicht was die Parameter sein sollen. Hier mal mein Code:
Könnt ih mir da mal bitte von meinem "Kabel" runterhelfen?
Gruß Buba
ICh steh grad ziemlich aufm Schlauch. Ich möchte einen bestimmten Pfad, der mir übergeben wird, komplett löschen. Ich muss ja erst den 1ten Ordner durchsuchen und falls da was drin ist,in den nächsten Ordner gehen usw. bis ich alles löschen kann. Mein Problem ist nun, dass ich die Rekursion nicht hinbekomme. Es muss an einer Kleinigkeit liegen. Das ganze Gerüst steht bereits, nur weiß ich nicht womit ich die Rekursion aufrufen muss. Soll heißen, ich weiß nicht was die Parameter sein sollen. Hier mal mein Code:
Code:
bool UaFileEngineWin::rmdir(const UaUniString &dirName) const
{
// Variables
int iErg = 0;
bool bRet;
UaUniStringList list;
UaUniString temp;
UaUniString sNewPath;
HANDLE hFind;
WIN32_FIND_DATA FindFileData;
// change sep from '\\' to '/'
UaDir myDir("");
UaUniString sPath = myDir.fromNativeSeparators(dirName);
UaUniString tmp = sPath;
const UaUShort *usTmp = tmp.toUtf16();
// check if path exists - if not return false
if (exists(sPath) == true)
{
// Find first file in this dir
hFind = FindFirstFile(sPath.toUtf16(), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
//OpcUa_Trace(OPCUA_TRACE_LEVEL_ERROR, "UaDir::rmpath: Invalid File Handle. GetLastError reports %d\n", GetLastError());
printf("UaDir::rmpath: Invalid File Handle. GetLastError reports %d\n", GetLastError());
return OpcUa_False;
}
else
{
// are there any files in the directory?
if (FindNextFile(hFind, &FindFileData) != OpcUa_False)
{
// remove all files to clean the directory
while (FindNextFile(hFind, &FindFileData) != OpcUa_False)
{
if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
// delete directory
iErg = _wrmdir(sPath.toUtf16());
if (iErg != 0)
{
return OpcUa_False;
}
}
else // not a dir
{
}
}
}
else // => empty directory
{
// remove all empty directories
while (FindNextFile(hFind, &FindFileData) == OpcUa_False)
{
list = tmp.split("/");
// get the splitted path without separators and create new path
for (OpcUa_UInt16 i = 0; i < list.size(); i++)
{
temp = list[i];
sNewPath += temp.append("/");
// check if first part of the path is the device
if (sNewPath == "C:/")
{
temp = list[i + 1];
sNewPath += temp.append("/");
}
// check if this path exists - if not create it
if (exists(sNewPath) != OpcUa_False)
{
Hier muss die Rekursion rein!!
// delete directory
iErg = _wrmdir(sNewPath.toUtf16());
if (iErg != 0)
{
return OpcUa_False;
}
}
}
}
}
// clean up
FindClose(hFind);
}
}
else // nothing to do
{
OpcUa_Trace(OPCUA_TRACE_LEVEL_INFO, "UaDir::rmpath: Path doesn`t exist!\n");
bRet = OpcUa_False;
}
return bRet;
}
Könnt ih mir da mal bitte von meinem "Kabel" runterhelfen?
Gruß Buba