2010-01-28 26 views
6

C'è un modo in C per rimuovere (utilizzando remove()) più file utilizzando uno * (caratteri jolly)? Ho un set di file che iniziano tutti con Index. Ad esempio: Index1.txt, Index-39.txt, ecc. Iniziano tutti con Indice ma non so quale testo segua. Ci sono anche altri file nella stessa directory, quindi l'eliminazione di tutti i file non funzionerà.Come rimuovere più file in C usando i caratteri jolly?

So che puoi leggere la directory, iterare ogni nome di file, leggere i primi 5 caratteri, confrontare e se si adatta quindi eliminare, ma, c'è un modo più semplice (questo è ciò che attualmente faccio a proposito) ?

Questo è C standard, poiché il codice viene eseguito su Linux e Windows.

risposta

9

Come si fa notare, è possibile utilizzare diropen, dirread, dirclose per accedere ai contenuti della directory, una funzione propria (o trasformare i caratteri jolly in un'espressione regolare e utilizzare una libreria di espressioni regolari) in modo che corrispondano e scollegare da eliminare.

Non c'è un modo standard per farlo più facile. Probabilmente ci saranno biblioteche, ma non saranno più efficienti di quello che stai facendo. In genere una funzione di ricerca dei file richiede una richiamata in cui viene fornita la parte relativa all'azione e alla corrispondenza del codice. Tutto quello che starai salvando è il ciclo.

+0

Grazie per la risposta. Apprezzo sempre quando le persone ti dicono quando qualcosa non può essere fatto, invece di fartelo sapere. – Uri

+2

Su Unix invece di convertire i caratteri jolly in espressioni regolari, dovresti usare fnmatch (http://www.opengroup.org/onlinepubs/000095399/functions/fnmatch.html). –

6

Se non vi dispiace essere specifico per la piattaforma, è possibile utilizzare il system() chiamata:

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

Here è certa documentazione sulla chiamata system(), che fa parte della libreria standard C (cstdlib) .

+2

'system' è specifico dell'implementazione per definizione, quindi aggiungo sempre un pilota per cercare la documentazione del relativo fornitore (se è possibile trovarlo). Principio delle meno sorprese. – dirkgently

+1

Grazie, ma system() è un incubo per la sicurezza. – Uri

0

È tutto ciò che fa il programma? In tal caso, lasciare che la riga di comando fare l'espansione jolly per voi:

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

su Windows, è necessario collegare contro 'setargv.obj', incluso nella directory lib standard di VC.

Problemi correlati