View Full Version : algoritmo per esplorazione file system
cerco un algoritmo per l'esplorazione del file system a partire da una cartella, da implementare in c# per realizzare un toolettino (visto che non ho trovato nulla di già pronto) per analizzare il file system e scovare i file con nome troppo lungo che mi creano problemi in fase di manutenzione di un file server Windows 2003.
grazie :)
data la cartella X
1. crea una lista vuota di file L
2. aggiungi alla lista X
3. per ogni file F nella lista L
3.1 se F è una cartella
3.2 aggiungi a L ogni file che si trova in F
4. restituisci L
A questo punto hai linearizzato l'albero di cartelle. Hai tutti i file e puoi cercare, ordinare, stampare fare e disfare :D.
data la cartella X
1. crea una lista vuota di file L
2. aggiungi alla lista X
3. per ogni file F nella lista L
3.1 se F è una cartella
3.2 aggiungi a L ogni file che si trova in F
4. restituisci L
A questo punto hai linearizzato l'albero di cartelle. Hai tutti i file e puoi cercare, ordinare, stampare fare e disfare :D.
sarà che è lunedì mattina :) ma nn ti seguo in toto:
- la prima volta L contiene solo X
- al pto 3 devo cercare tutti i file di X quindi? e aggiungere le cartelle trovate alla lista (tenendo traccia di qualcosa, che so la ricerca già effettuata?)
- poi devo ripartire con lo scan di L?
grazie
Al 3.2 dovresti usare la ricorsione:
"3.2 aggiungi a L ogni file che si trova nella lista calcolata per F"
Il mio primo programma C#! :D
/*
* Creato da SharpDevelop.
* Utente: pgi
* Data: 16/04/2007
* Ora: 17.42
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.IO;
namespace pathscanner
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine("Welcome to pathscanner");
List<FileSystemInfo> files = new MainClass().ScanDirectory(args[0]);
int trigger = int.Parse(args[1]);
int count = 0;
for(int i = 0; i < files.Count; i++) {
FileSystemInfo file = files[i];
if(file.Name.Length > trigger) {
Console.WriteLine("Beccato: " + file.FullName);
count++;
}
}
Console.WriteLine("Numero di file incriminati: " + count);
}
private List<FileSystemInfo> ScanDirectory(String directoryPath) {
List<FileSystemInfo> elements = new List<FileSystemInfo>();
DirectoryInfo dir = new DirectoryInfo(directoryPath);
elements.Add(dir);
for(int i = 0; i < elements.Count; i++) {
FileSystemInfo file = elements[i];
if(file is DirectoryInfo) {
DirectoryInfo dirElement = (DirectoryInfo)file;
try {
FileInfo[] files = dirElement.GetFiles();
for(int j = 0; j < files.Length; j++) {
elements.Add(files[j]);
}
DirectoryInfo[] dirs = dirElement.GetDirectories();
for(int j = 0; j < dirs.Length; j++) {
elements.Add(dirs[j]);
}
} catch(UnauthorizedAccessException ex) {
Console.WriteLine(ex.Message);
}
}
}
return elements;
}
}
}
Funziona anche se dubito che in C# si faccia così :D.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.