내 PC의 백업 대상으로 사용한 외장 하드 디스크가 있습니다. 분명히 읽을 수 없게되었으므로 회복해야했습니다. 복구 프로그램은 모든 파일을 HD의 루트에 저장하므로 기본 폴더에 300.000 개의 파일이 있습니다.외부 HD의 루트에있는 엄청난 수의 파일 삭제
폴더의 확장명에 따라 파일 (JPG, 3GP, TIFF, C/H 헤더 등)을 다시 구성했습니다. 그렇다면 여전히 백업의 어딘가에서 오는 .html과 .htm 파일의 거대한 (60.000) 개의 파일이 있습니다.이 파일은 Windows 10 탐색기에서 이동하거나 삭제할 수 없습니다 (멈춤).
주요 과제는 다음과 같습니다
- 파일 내 HD의 루트에있는 -> 내가 (둘 다 내가 폴더에 복사 할 수 없습니다, 또는 모든 정지) 제거 디렉토리 명령을 사용할 수 없습니다 나는 내가 실제로 잘 작동이 C 프로그램을 작성
충분히 비어있는 저장 공간을 가지고 있지 않기 때문에 HD에
내 질문에이 프로그램을 사용하는 데있어서의 단점과 개선 방법을 설명 할 수 있습니다.
코드는 다음과 같습니다
#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;
}
작업 코드를 향상시킬 수있는 방법에 대한 질문이 스택 오버플로에서 벗어난 주제이므로이 주제를 오프 토픽으로 닫으려고합니다. 이러한 질문은 코드 검토에서 규칙 및 표준에 따라 문의해야합니다. – TylerH
더 집중된 코딩 문제를 다루는 스택 오버플로가 너무 광범위하기 때문에이 질문을 주제와 관련이 없도록 닫으려고합니다. 작업 코드 개선에 대한 조언을 얻으려면 대신 [codereview.se]를 고려하십시오. 먼저 [Stack Overflow 사용자를위한 코드 검토 안내서] (// codereview.meta.stackexchange.com/a/5778)를 읽으십시오. 저기 다르게 끝났어. –