2010-01-28 4 views
6

* (와일드 카드)을 사용하여 여러 파일을 제거하려면 (remove() 사용) 어떤 방법이 있습니까? 모두 색인으로 시작하는 일련의 파일이 있습니다. 예 : Index1.txt, Index-39.txt 등 모두 색인으로 시작하지만 어떤 텍스트가 올지 알 수 없습니다. 동일한 디렉토리에 다른 파일도 있으므로 모든 파일을 삭제해도 작동하지 않습니다.와일드 카드를 사용하여 C에서 여러 파일을 제거하는 방법?

나는 당신이 디렉토리를 읽을 수 있고, 각 파일 이름을 반복하고, 첫 번째 5 개의 문자를 읽고, 비교하고, 그 다음에 삭제한다면, 더 쉬운 방법이 있는지 알고있다. (이것이 현재 내가하는 일이다) ?

이 코드는 Linux와 Windows에서 실행되므로 표준 C입니다.

system("del index*.txt"); // DOS 
system("rm index*.txt"); // unix 

Here 표준 C 라이브러리의 일부 (cstdlib) 인 system() 전화에 대한 몇 가지 문서입니다 : 당신이 특정 플랫폼 인 괜찮다면

답변

9

diropen, dirread, dirclose를 사용하여 디렉토리 내용에 액세스하거나 자신의 기능 (또는 정규 표현식으로 와일드 카드를 변환하고 정규 표현식 라이브러리 사용)을 사용하여 삭제하고 삭제할 수 있습니다.

이 작업을 쉽게 수행 할 수있는 표준 방법은 없습니다. 도서관이 될 가능성이 있지만, 자신이하는 것보다 더 효율적이지는 않습니다. 일반적으로 파일 찾기 함수는 코드의 일치하는 부분과 액션 부분을 제공하는 콜백을 사용합니다. 저장하는 것이 모두 루프입니다.

+0

답변 해 주셔서 감사합니다. 사람들이 BS를하는 대신 뭔가를 할 수 없을 때 사람들에게 알려주면 항상 감사합니다. – Uri

+2

유닉스에서 와일드 카드를 정규식으로 변환하는 대신 fnmatch (http://www.opengroup.org/onlinepubs/000095399/functions/fnmatch.html)를 사용해야합니다. –

6

, 당신은 system() 전화를 사용할 수 있습니다 .

+2

'system'은 정의에 따라 구현이 다르므로 필자는 항상 라이더를 추가하여 관련 공급 업체 문서를 찾습니다 (찾을 수있는 경우). 최소한의 놀라움의 원칙. – dirkgently

+1

감사합니다. 그러나 system()은 보안상의 악몽입니다. – Uri

0

이 프로그램은 모두 수행합니까? 이 경우, 명령 줄 당신을 위해 와일드 카드 확장을 할 수 있도록 :

int main(int argc, char* argv[]) 
{ 
    while (argc--) 
    remove(argv[argc]); 
} 

Windows에서, 당신은 VC 표준 lib 디렉토리에 포함 된 'setargv.obj'에 연결해야합니다.

관련 문제