Confronto tra stringhe di percorso e lista di regole

2

Sto cercando di trovare un modo per migliorare un algoritmo di filtraggio. Sto sviluppando un software di backup che consente agli utenti di specificare filtri personalizzati per escludere file / directory indesiderati. Attualmente quando provi a verificare se un file deve essere incluso nel backup, il percorso del file viene confrontato con un elenco di regole.

Ogni regola è specifica per un singolo percorso (file o directory) e il percorso del file viene confrontato in un modo simile a questo:

Supponiamo che questa sia la nostra struttura delle regole

[Rule]
Path = "C:\Windows\"
Exclude = TRUE

E confronto il percorso del file che ho ottenuto con il percorso della regola per la lunghezza del percorso della regola.

Ora, questo funziona correttamente e non ho avuto un problema con esso, ma il mio problema è che non ho un limite al numero di regole che un utente può aggiungere al sistema. Può aggiungere tutte le regole che gli piacciono e questo è il mio problema.

Più regole un utente aggiunge significa più iterazioni per ogni file rispetto al set di regole.

Che cosa è una buona pratica per fare una cosa del genere?

    
posta Zaid Amir 25.02.2015 - 12:25
fonte

1 risposta

3

Un modo per migliorare questo è costruire una struttura ad albero fuori dai componenti del percorso.

Quindi, se aggiunge c:\Windows\system32 e c:\Windows\temp e il tuo percorso di input è c:\users\serpent , puoi tranquillamente saltare entrambe le regole con un singolo controllo.

Con l'aumentare delle regole, questo approccio può ridurre notevolmente il controllo. Alcune raccolte possono farlo automaticamente (ad esempio una mappa c ++ stl), aggiungi tutti i tuoi percorsi e la raccolta li memorizza in una struttura ad albero in base alle stringhe.

Modifica:

Immagina di cercare un taxi nell'elenco telefonico. Sei tu: inizia dall'inizio e fai il tuo lavoro, confrontando il tuo fabbisogno di un taxi con gli addestratori di aardvark, i venditori di abaco, ecc .; o salti alla sezione T, quindi salta alla sottosezione Taxi e poi guarda l'elenco delle compagnie di taxi?

Questo è lo stesso principio - se dividi i tuoi percorsi di regole nei loro componenti, allora una directory di input che è (nei nostri esempi) non all'interno della directory radice di Windows può essere saltata completamente - non c'è bisogno di controllare contro c: \ Windows \ temp perché hai escluso tutte c: \ Windows \ tutte le regole.

    
risposta data 25.02.2015 - 12:39
fonte

Leggi altre domande sui tag