Added removal routine
This commit is contained in:
parent
8805985855
commit
0cd02d1752
40
main.c
40
main.c
|
@ -27,6 +27,30 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
// Removes a directory using the Windows shell
|
||||||
|
int shellRemoveDir(LPCTSTR dirPath){
|
||||||
|
// Remove the directory
|
||||||
|
//printf("!! ATTEMPT TO REMOVE %s\\...\n", dirPath);
|
||||||
|
|
||||||
|
// Append null to the end of the path
|
||||||
|
// Double null terminated path string
|
||||||
|
char dntps[strlen(dirPath) + 2];
|
||||||
|
strcpy(dntps, dirPath);
|
||||||
|
strcat(dntps, "\\\0");
|
||||||
|
|
||||||
|
SHFILEOPSTRUCT dir = {
|
||||||
|
NULL,
|
||||||
|
FO_DELETE,
|
||||||
|
dntps,
|
||||||
|
NULL,
|
||||||
|
FOF_NOCONFIRMATION | FOF_NOERRORUI,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
""
|
||||||
|
};
|
||||||
|
return SHFileOperation(&dir);
|
||||||
|
}
|
||||||
|
|
||||||
// Prints the program license to the user.
|
// Prints the program license to the user.
|
||||||
int printLicense(int full){
|
int printLicense(int full){
|
||||||
if (full == 0) {
|
if (full == 0) {
|
||||||
|
@ -83,17 +107,29 @@ void cleanDir(const char* path){
|
||||||
if (iteration <= 2)
|
if (iteration <= 2)
|
||||||
continue;
|
continue;
|
||||||
printf("%s %s\n", STR_FOUND_ITEM, data.cFileName);
|
printf("%s %s\n", STR_FOUND_ITEM, data.cFileName);
|
||||||
// Attempt to delete file...
|
// Attempt to delete item...
|
||||||
|
|
||||||
int pathSize = strlen(wildPath) + strlen(data.cFileName);
|
int pathSize = strlen(wildPath) + strlen(data.cFileName);
|
||||||
char fullPath[pathSize];
|
char fullPath[pathSize];
|
||||||
strcpy(fullPath, path);
|
strcpy(fullPath, path);
|
||||||
strcat(fullPath, data.cFileName);
|
strcat(fullPath, data.cFileName);
|
||||||
|
|
||||||
|
// If the item is a directory, then delete it through the shell
|
||||||
|
if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
|
||||||
|
int shellReturnCode = shellRemoveDir(fullPath);
|
||||||
|
if (shellReturnCode != 0){
|
||||||
|
printf(" %s\n", STR_FAILED_DIR);
|
||||||
|
printf(" --> %s\n", fullPath);
|
||||||
|
printf(" --> %#010x\n", shellReturnCode);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (DeleteFile(fullPath) == 0){
|
if (DeleteFile(fullPath) == 0){
|
||||||
|
int lastError = GetLastError();
|
||||||
printf(" %s\n", STR_FAILED_FILE);
|
printf(" %s\n", STR_FAILED_FILE);
|
||||||
printf(" --> %s\n", fullPath);
|
printf(" --> %s\n", fullPath);
|
||||||
printf(" --> %#010x\n", GetLastError());
|
printf(" --> %#010x\n", lastError);
|
||||||
} else
|
} else
|
||||||
printf(" %s\n", STR_DELETED_FILE);
|
printf(" %s\n", STR_DELETED_FILE);
|
||||||
} while(FindNextFile(hFind, &data));
|
} while(FindNextFile(hFind, &data));
|
||||||
|
|
1
str.h
1
str.h
|
@ -35,6 +35,7 @@
|
||||||
#define STR_FOUND_ITEM "[Item encontrado]"
|
#define STR_FOUND_ITEM "[Item encontrado]"
|
||||||
#define STR_FAILED_DIR_LIST "Um erro ocorreu ao tentar enumerar os arquivos dentro de uma pasta especificada."
|
#define STR_FAILED_DIR_LIST "Um erro ocorreu ao tentar enumerar os arquivos dentro de uma pasta especificada."
|
||||||
#define STR_FAILED_FILE "[Arquivo mantido] Não foi possível remover este arquivo pelo seguinte erro:"
|
#define STR_FAILED_FILE "[Arquivo mantido] Não foi possível remover este arquivo pelo seguinte erro:"
|
||||||
|
#define STR_FAILED_DIR "[Pasta mantida] Não foi possível remover esta pasta pelo seguinte erro:"
|
||||||
|
|
||||||
#define STR_ERROR_LIC "Falha ao ler arquivo de licença. Visite <https://www.gnu.org/licenses/> para mais informações."
|
#define STR_ERROR_LIC "Falha ao ler arquivo de licença. Visite <https://www.gnu.org/licenses/> para mais informações."
|
||||||
|
|
||||||
|
|
Reference in New Issue