L'objectif final est d'avoir une forme de structure de données qui stocke une structure hiérarchique d'un répertoire à stocker dans un fichier txt. J'utilise le code suivant et jusqu'à présent, et j'ai du mal à combiner les répertoires, les sous-répertoires et les fichiers.Débutant - Itération C# dans le répertoire pour produire une liste de fichiers
/// <summary>
/// code based on http://msdn.microsoft.com/en-us/library/bb513869.aspx
/// </summary>
/// <param name="strFolder"></param>
public static void TraverseTree (string strFolder)
{
// Data structure to hold names of subfolders to be
// examined for files.
Stack<string> dirs = new Stack<string>(20);
if (!System.IO.Directory.Exists(strFolder))
{
throw new ArgumentException();
}
dirs.Push(strFolder);
while (dirs.Count > 0)
{
string currentDir = dirs.Pop();
string[] subDirs;
try
{
subDirs = System.IO.Directory.GetDirectories(currentDir);
}
catch (UnauthorizedAccessException e)
{
MessageBox.Show("Error: " + e.Message);
continue;
}
catch (System.IO.DirectoryNotFoundException e)
{
MessageBox.Show("Error: " + e.Message);
continue;
}
string[] files = null;
try
{
files = System.IO.Directory.GetFiles(currentDir);
}
catch (UnauthorizedAccessException e)
{
MessageBox.Show("Error: " + e.Message);
continue;
}
catch (System.IO.DirectoryNotFoundException e)
{
MessageBox.Show("Error: " + e.Message);
continue;
}
// Perform the required action on each file here.
// Modify this block to perform your required task.
/*
foreach (string file in files)
{
try
{
// Perform whatever action is required in your scenario.
System.IO.FileInfo fi = new System.IO.FileInfo(file);
Console.WriteLine("{0}: {1}, {2}", fi.Name, fi.Length, fi.CreationTime);
}
catch (System.IO.FileNotFoundException e)
{
// If file was deleted by a separate application
// or thread since the call to TraverseTree()
// then just continue.
MessageBox.Show("Error: " + e.Message);
continue;
}
}
*/
// Push the subdirectories onto the stack for traversal.
// This could also be done before handing the files.
foreach (string str in subDirs)
dirs.Push(str);
foreach (string str in files)
MessageBox.Show(str);
}
Je pense que vous Je vais devoir exposer votre problème plus clairement. Le code semble bien au premier coup d'œil. – dtb
BTW l'algorithme fonctionne itérativement avec une pile explicite, pas récursivement. – dtb
N'ayez pas peur de la récursivité! –