Ho un array di stringhe di alcuni percorsi di file:Come posso convertire una lista di nomi di file in una struttura ad albero?
path/to/folder/file.xxx
path/to/other/
path/to/file/file.xx
path/file.x
path/
Come posso convertire questo elenco per una struttura ad albero? Finora ho il seguente:
/// <summary>
/// Enumerates types of filesystem nodes.
/// </summary>
public enum FilesystemNodeType
{
/// <summary>
/// Indicates that the node is a file.
/// </summary>
File,
/// <summary>
/// Indicates that the node is a folder.
/// </summary>
Folder
}
/// <summary>
/// Represents a file or folder node.
/// </summary>
public class FilesystemNode
{
private readonly ICollection<FilesystemNode> _children;
/// <summary>
/// Initializes a new instance of the <see cref="FilesystemNode"/> class.
/// </summary>
public FilesystemNode()
{
_children = new LinkedList<FilesystemNode>();
}
/// <summary>
/// Gets or sets the name of the file or folder.
/// </summary>
public string Name { get; set; }
/// <summary>
/// Gets or sets the full path to the file or folder from the root.
/// </summary>
public string Path { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the node is a file or folder.
/// </summary>
public FilesystemNodeType Type { get; set; }
/// <summary>
/// Gets a list of child nodes of this node. The node type must be a folder to have children.
/// </summary>
public ICollection<FilesystemNode> Children
{
get
{
if (Type == FilesystemNodeType.Folder)
return _children;
throw new InvalidOperationException("File nodes cannot have children");
}
}
}
Sono solo un po 'in perdita su come effettivamente ripartire i percorsi e tutto. Qualsiasi percorso che termina con un/è una directory, nessuno che non lo fa, non lo è.
Inoltre, mentre il mio input conterrà sempre un percorso per la cartella, come dovrei tenere conto di quella situazione se non lo fosse?
Per esempio, se ho avuto l'input:
path/to/file.c
path/file.c
path/
Come faccio a spiegare il fatto che path/to/
non è in ingresso?
Questo mi ha fatto al punto in cui avevo bisogno, vi ringrazio tanto! –
Sintesi di questo aggiunto qui: https://gist.github.com/2282389 (per praticità) –
Come selezionare i bambini da un sottonodo, ad esempio come richiamare i bambini da 'sottodirectory' in' directory1/sottodirectory/file' ? –