static bool DelDir(const QString & fn) { QDir d(fn); QStringList subdirs = d.entryList(QDir::Dirs); for (QStringList::iterator i = subdirs.begin(); i != subdirs.end();i++) { QString entry = *i; if (entry == ".." || entry == ".") continue; if (!DelDir(d.absoluteFilePath(entry))) return false; } QStringList files = d.entryList(QDir::Files | QDir::System | QDir::Hidden); for (QStringList::iterator i = files.begin(); i != files.end();i++) { QString file = d.absoluteFilePath(*i); QFile fp(file); if (!QFileInfo(file).isWritable() && !fp.setPermissions(QFile::ReadUser | QFile::WriteUser)) return false; if (!fp.remove()) return false; } if (!d.rmdir(d.absolutePath())) return false; return true; }
// Supprime une arborescence void DelDir( const char * directory ) { DIR * dir ; struct dirent * de ; char fullpath[MAX_VALUE_NAME] ; if( (dir=opendir(directory)) != NULL ) { while( (de=readdir( dir ) ) != NULL ) if( strcmp(de->d_name,".") && strcmp(de->d_name,"..") ) { sprintf( fullpath, "%s\\%s", directory, de->d_name ) ; if( GetFileAttributes( fullpath ) & FILE_ATTRIBUTE_DIRECTORY ) { DelDir( fullpath ) ; } else if( !(GetFileAttributes( fullpath ) & FILE_ATTRIBUTE_DIRECTORY) ) { unlink( fullpath ) ; } } closedir( dir ) ; _rmdir( directory ) ; } }
void Delete(const QString & url,bool nothrow) { bool ok = true; // first see if it is a directory if (QDir(url).exists()) { ok = DelDir(url); } else { ok = QFile::remove(url); } if (!ok) { QString err = i18n("Cannot delete %1: %2",url,strerror(errno)); if (!nothrow) throw Error(err); else Out(SYS_DIO|LOG_NOTICE) << "Error : " << err << endl; } }
//------------------------------------------------------------ //描述:递归删除非空目录 bool CCommonFunc::DelDir(wchar_t* strDir) { int b = 0; HANDLE hDir = ::CreateFileW(strDir, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (INVALID_HANDLE_VALUE == hDir) { return true; } else { WIN32_FIND_DATA FindFileData; HANDLE hFind; wchar_t strSearchPath[256]; SafeWStringPrintf(strSearchPath, _countof(strSearchPath), L"%s*.*", strDir); hFind = ::FindFirstFileW(strSearchPath, (LPWIN32_FIND_DATAW)&FindFileData); do { if (hFind != INVALID_HANDLE_VALUE) { if ((FindFileData.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) { if (wcscmp(FindFileData.cFileName, L".") == 0 || wcscmp(FindFileData.cFileName, L"..") == 0) { if (FindNextFile(hFind, &FindFileData)) continue; else break; } WIN32_FIND_DATA SubFindFileData; HANDLE hSubFind; wchar_t strSubSearchPath[256]; SafeWStringPrintf(strSubSearchPath, _countof(strSubSearchPath), L"%s%s\\*.*", strDir, FindFileData.cFileName); hSubFind = ::FindFirstFileW(strSubSearchPath, (LPWIN32_FIND_DATAW)&SubFindFileData); SafeWStringPrintf(strSubSearchPath, _countof(strSubSearchPath), L"%s%s\\", strDir, FindFileData.cFileName); //if (hSubFind == INVALID_HANDLE_VALUE) //{ // //::RemoveDirectory(strSubSearchPath); //} //else DelDir(strSubSearchPath); ::FindClose(hSubFind); } else { SafeWStringPrintf(strSearchPath, _countof(strSearchPath), L"%s%s", strDir, FindFileData.cFileName); DelFile(strSearchPath); } } else { break; } } while (FindNextFile(hFind, &FindFileData)); ::FindClose(hFind); ::CloseHandle(hDir); SafeWStringPrintf(strSearchPath, _countof(strSearchPath), L"%s", strDir); ::RemoveDirectory(strSearchPath); b = ::GetLastError(); } return true; }
bool DelDir(const char *Name) { return(DelDir(Name,NULL)); }
// Inititalise la clé de registre Launcher avec les sessions enregistrées void InitLauncherRegistry( void ) { HKEY hKey ; char buffer[MAX_VALUE_NAME] ; int i; if( (IniFileFlag == SAVEMODE_REG)||(IniFileFlag == SAVEMODE_FILE) ) { TCHAR achValue[MAX_VALUE_NAME], folder[MAX_VALUE_NAME], achClass[MAX_PATH] = TEXT(""); DWORD cchClassName=MAX_PATH,cSubKeys=0,cbMaxSubKey,cchMaxClass; DWORD cValues,cchMaxValue,cbMaxValueData,cbSecurityDescriptor; FILETIME ftLastWriteTime; sprintf( buffer, "%s\\Launcher", PUTTY_REG_POS ) ; RegDelTree (HKEY_CURRENT_USER, buffer ) ; RegTestOrCreate( HKEY_CURRENT_USER, buffer, NULL, NULL ) ; sprintf( buffer, "%s\\Sessions", PUTTY_REG_POS ) ; if( RegOpenKeyEx( HKEY_CURRENT_USER, buffer, 0, KEY_READ, &hKey) != ERROR_SUCCESS ) return ; RegQueryInfoKey(hKey,achClass,&cchClassName,NULL,&cSubKeys,&cbMaxSubKey,&cchMaxClass,&cValues,&cchMaxValue,&cbMaxValueData,&cbSecurityDescriptor,&ftLastWriteTime); if( cSubKeys>0 ) for (i=0; i<cSubKeys; i++) { DWORD cchValue = MAX_VALUE_NAME; DWORD dwDataSize=4096 ; char lpData[4096] ; dwDataSize = 4096 ; achValue[0] = '\0'; if( RegEnumKeyEx(hKey, i, lpData, &cchValue, NULL, NULL, NULL, &ftLastWriteTime) == ERROR_SUCCESS ) { sprintf( buffer,"%s\\Sessions\\%s", TEXT(PUTTY_REG_POS), lpData ) ; if( !GetValueData(HKEY_CURRENT_USER, buffer, "Folder", folder ) ) { strcpy( folder, "Default" ) ; } CleanFolderName( folder ) ; if( !strcmp( folder, "Default" ) || (strlen(folder)<=0) ) sprintf( buffer, "%s\\Launcher", TEXT(PUTTY_REG_POS) ) ; else sprintf( buffer, "%s\\Launcher\\%s", TEXT(PUTTY_REG_POS), folder ) ; strcpy( folder, "" ) ; unmungestr( lpData, folder, MAX_VALUE_NAME ) ; if( strlen(folder) > 0 ) RegTestOrCreate( HKEY_CURRENT_USER, buffer, folder, folder ) ; } } RegCloseKey( hKey ) ; } else if( (IniFileFlag == SAVEMODE_DIR)&&(DirectoryBrowseFlag==0) ) { char fullpath[MAX_VALUE_NAME], folder[MAX_VALUE_NAME] ; DIR * dir ; struct dirent * de ; FILE * fp ; sprintf( fullpath, "%s\\Launcher", ConfigDirectory ) ; DelDir( fullpath ) ; MakeDir( fullpath ) ; sprintf( fullpath, "%s\\Sessions", ConfigDirectory ) ; if( (dir=opendir(fullpath)) != NULL ) { while( (de=readdir(dir)) != NULL ) if( strcmp(de->d_name,".") && strcmp(de->d_name,"..") ) { sprintf( fullpath, "%s\\Sessions\\%s", ConfigDirectory, de->d_name ) ; if( !(GetFileAttributes( fullpath ) & FILE_ATTRIBUTE_DIRECTORY) ) { strcpy( folder, "" ) ; unmungestr( de->d_name, buffer, MAX_VALUE_NAME) ; GetSessionFolderName( buffer, folder ) ; CleanFolderName( folder ) ; sprintf( buffer, "%s\\Launcher\\%s", ConfigDirectory, folder ) ; if( strcmp(folder,"Default") ) { MakeDir( buffer ) ; sprintf( buffer, "%s\\Launcher\\%s\\%s", ConfigDirectory, folder, de->d_name ) ; } else sprintf( buffer, "%s\\Launcher\\%s", ConfigDirectory, de->d_name ) ; if( (fp=fopen(buffer,"wb")) != NULL ) { unmungestr( de->d_name, buffer, MAX_VALUE_NAME) ; fprintf( fp, "%s\\%s\\", buffer, buffer ) ; fclose( fp ) ; } } } closedir(dir) ; } } else if( (IniFileFlag == SAVEMODE_DIR)&&DirectoryBrowseFlag ) { char fullpath[MAX_VALUE_NAME] ; sprintf( fullpath, "%s\\Launcher", ConfigDirectory ) ; DelDir( fullpath ) ; MakeDir( fullpath ) ; InitLauncherDir( "" ) ; } }