Voglio elencare tutti i file e le cartelle a cui il mio programma ha accesso e scriverli in un file di testo. Come potrei ottenere la lista? Ho bisogno di un modo che catturi o meno le eccezioni non autorizzate su cartelle che non sono accessibili.
Si prega di provare a utilizzare il codice:
private static IEnumerable Traverse(string rootDirectory) { IEnumerable files = Enumerable.Empty (); IEnumerable directories = Enumerable.Empty (); try { // The test for UnauthorizedAccessException. var permission = new FileIOPermission(FileIOPermissionAccess.PathDiscovery, rootDirectory); permission.Demand(); files = Directory.GetFiles(rootDirectory); directories = Directory.GetDirectories(rootDirectory); } catch { // Ignore folder (access denied). rootDirectory = null; } if (rootDirectory != null) yield return rootDirectory; foreach (var file in files) { yield return file; } // Recursive call for SelectMany. var subdirectoryItems = directories.SelectMany(Traverse); foreach (var result in subdirectoryItems) { yield return result; } }
Codice cliente:
var paths = Traverse(@"Directory path"); File.WriteAllLines(@"File path for the list", paths);
Controlla Directory.GetFiles()
e metodi correlati.
Puoi provare con
var files = from file in Directory.EnumerateFiles(@"your Path", "*.*", SearchOption.AllDirectories) select file;
Utilizzando Traverse suggerito da Serge e la class DriveInfo è ansible accedere a tutti i file disponibili sul PC.
DriveInfo[] allDrives = DriveInfo.GetDrives(); foreach (DriveInfo d in allDrives) { if (d.IsReady == true) { var paths = Traverse(d.Name); File.AppendAllLines(@"File path for the list", paths); } }
Provare
string[] files = Directory.GetFiles(@"C:\\", "*.*", SearchOption.AllDirectorys);
Questo dovrebbe darti un array contenente tutti i file sul disco rigido.