#include #include #include #include #include #include char dirname[1024] = "\\"; char filename[1024]; char real_name[1024]; char temp_filename[1024]; int DebugDir = 0; int AutoDeleteExe = 0; int AutoStayExe = 0; unsigned int filecount = 0; unsigned long filesize = 0; unsigned int removed_count = 0; unsigned long removed_size = 0; unsigned int not_removed_count = 0; unsigned long not_removed_size = 0; unsigned int stay_count = 0; unsigned long stay_size = 0; void removefile(char *path, unsigned long dwFileSize) { char *ext = strrchr(real_name, '.'); int c = 0; strcpy(temp_filename, path); strcat(temp_filename, real_name); if (stricmp(ext, ".ILK") == 0 || stricmp(ext, ".OBJ") == 0 || stricmp(ext, ".PCH") == 0 || stricmp(ext, ".PDB") == 0 || stricmp(ext, ".IDB") == 0 || (AutoDeleteExe == -1 && stricmp(ext, ".EXE") == 0)) { if (remove (temp_filename) == 0) { printf("削除完了 %s\n", temp_filename); removed_count++; removed_size += dwFileSize; } else { printf("削除失敗 %s\n", temp_filename); not_removed_count++; not_removed_size += dwFileSize; } } else if (AutoStayExe == 0 && stricmp(ext, ".EXE") == 0) { while (1) { while (kbhit()) c = getch(); printf ("%s を削除してよろしいですか?(/No)\n", temp_filename); c = getch(); if (c == 0x0D || c ==' ' || c == 'Y' || c == 'y' || c == 'ン') { if (remove (temp_filename) == 0) { printf("削除完了 %s\n", temp_filename); removed_count++; removed_size += dwFileSize; } else { printf("削除失敗 %s\n", temp_filename); not_removed_count++; not_removed_size += dwFileSize; } break; } else if (c == 'N' || c == 'n' || c == 'ミ') { printf("削除保留 %s\n", temp_filename); stay_count++; stay_size += dwFileSize; break; } } } else { printf("削除保留 %s\n", temp_filename); stay_count++; stay_size += dwFileSize; } } void searchfiles(char *path) { unsigned int path_length = strlen(path); HANDLE FH; WIN32_FIND_DATA DTA32; strcpy (filename, path); strcat (filename, "*.*"); FH = FindFirstFile(filename, &DTA32); if (FH != INVALID_HANDLE_VALUE) { do { if ((DTA32.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) { if (DTA32.cFileName != NULL) strcpy (real_name, DTA32.cFileName); else strcpy (real_name, DTA32.cAlternateFileName); if (DebugDir) removefile(path, DTA32.nFileSizeLow); filecount++; filesize += DTA32.nFileSizeLow; } } while (FindNextFile(FH, &DTA32)); FindClose(FH); } if (DebugDir == 0) { FH = FindFirstFile(filename, &DTA32); if (FH != INVALID_HANDLE_VALUE) { do { if (DTA32.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (DTA32.cFileName != NULL) strcpy (real_name, DTA32.cFileName); else strcpy (real_name, DTA32.cAlternateFileName); if (real_name[0] != '.') { strcat (path, real_name); strcat (path, "\\"); if (stricmp(real_name, "Debug") == 0) DebugDir = -1; else DebugDir = 0; searchfiles (path); if (DebugDir) { DebugDir = 0; *(strchr(path, 0) - 1) = '\0'; rmdir(path); } path[path_length] = '\0'; } } } while (FindNextFile(FH, &DTA32)); FindClose(FH); } } } int main(int argc, char *argv[]) { int i = 0; puts("Debug フォルダ内の *.ILK, *.OBJ, *.PCH, *.PDB, *.IDB, *.EXE を削除します。"); if (argc == 2 && stricmp(argv[1], "/Y") == 0) { AutoDeleteExe = -1; } else if (argc == 2 &&stricmp(argv[1], "/N") == 0) { AutoStayExe = -1; } else if (argc != 1) { puts("オプション: /Y *.EXEを自動で削除します。"); puts(" /N *.EXEを削除保留にします。"); return 0; } chdir("\\"); searchfiles(dirname); puts ("\n\n結果レポート:"); if (removed_count) { printf(" %5u 個 %10lu バイトのファイルを削除しました。\n", removed_count, removed_size); filecount -= removed_count; filesize -= removed_size; } else { puts (" 削除可能なファイルは存在しません。"); } printf(" %5u 個 %10lu バイトのファイルがあります。\n", filecount, filesize); if (not_removed_count) printf(" 削除に失敗したファイルが %u 個(%lu バイト)あります。\n", not_removed_count, not_removed_size); if (stay_count) printf(" 削除を保留したファイルが %u 個(%lu バイト)あります。\n", stay_count, stay_size); while (i++ < 120) { if (kbhit()) break; Sleep(500); } return (not_removed_count != 0); }