У меня есть внешний жесткий диск, который я использовал в качестве места назначения для резервного копирования для своего ПК. Затем мне пришлось его восстановить, поскольку, видимо, он стал нечитаемым. Программа восстановления поместила все файлы в корневой каталог HD, так что у меня есть 300 000 файлов в основной папке.Удалите огромное количество файлов в корне внешнего HD
Я повторно организовал файлы (JPG, 3GP, TIFF, C/H заголовки и т. Д.) В соответствии с их расширением в папках. Затем у меня все еще есть огромное (60 000) количество файлов .html и .htm, которые откуда-то появляются в резервной копии, которые я не могу переместить или удалить из проводника Windows 10 (он зависает).
Основными задачами являются:
- файлы находятся в корневом каталоге моего HD -> Я не могу использовать команду каталога удалить (ни я не могу скопировать их в папку, или все замерзает)
- другие файлы в HD не может быть перемещен на другой компьютер, так как у меня нет достаточно свободного места для хранения
Я написал эту C программу, которая на самом деле работала хорошо, но я должен был запустить его в 3 раза, потому что он разбился из-за SIGSEV.
Вопрос в том, можете ли вы объяснить мне недостатки использования этой программы и как ее можно улучшить.
Код:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
void makeStr (char* fileName, char* file)
{
static char* str = "F:/";
//Build the string
sprintf (fileName, "%s%s", str, file);
return;
}
int main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("F:/");
char* ext;
char name[260];
int count = 0;
const char* format1 = "html";
const char* format2 = "htm";
if (dp != NULL)
{
// Look in the folder
while (((ep = readdir (dp)) != NULL) || count < 60000)
{
count++;
// Find files with an associated file type
ext = strrchr(ep->d_name, '.');
if (!ext)
{
/* no extension */
}
else
{
if (memcmp((char*)format1, (char*)(ext + 1), 4) == 0)
{
makeStr(name, ep->d_name);
if(remove(name) == -1)
{
printf ("ERROR REMOVING %s\n", ep->d_name);
//exit(-1);
}
}
else if (memcmp((char*)format2, (char*)(ext + 1), 3) == 0)
{
makeStr(name, ep->d_name);
if(remove(name) == -1)
{
printf ("ERROR REMOVING %s\n", ep->d_name);
//exit(-1);
}
else if (count % 100 == 0)
{
printf("Going well: %d files removed . . .\n",count);
}
}
}
//printf ("%s\n", ep->d_name);
}
closedir (dp);
}
else
printf ("Couldn't open the directory");
return 0;
}
Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что вопросы о том, как рабочий код можно улучшить, вне темы в Stack Overflow. Вместо этого такие вопросы следует задавать по пересмотру кода в соответствии с их правилами и стандартами. – TylerH
Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он слишком широк для Stack Overflow, который имеет дело с более целенаправленными проблемами с кодированием. Для получения рекомендаций по улучшению рабочего кода рассмотрите [codereview.se] вместо этого, но сначала прочитайте [Руководство по обзору кода для пользователей переполнения стека] (// codereview.meta.stackexchange.com/a/5778), поскольку некоторые вещи сделано по-другому там !. –