如果我想要一个描述根目录(递归)内容的集合,包括目录和文件,我将如何存储它们?或者我是否需要提出一个包含以下内容的对象: - 当前目录 - 目的地 - 目录中的文件
..并将它们全部打包在一个大的列表中,并在每个条目的父目录中手动计算运行时的关系。
答案 0 :(得分:1)
如果DirectoryInfo和FileInfo类不够,那么您应该使用Tree structure。
答案 1 :(得分:0)
.NET框架已包含Directory / File和DirectoryInfo / FileInfo。但是如果你真的需要自己动手,我建议你有一个父,名,目录(子)和文件的对象。这样你就可以愉快地在结构中上下移动。
答案 2 :(得分:0)
如果你想创建一些分层的东西,你必须创建一个拥有自己列表的类。
class MyDirectory
-MyFile[] Files
-MyDirectory Parent
-MyDirectory[] SubDirectories
答案 3 :(得分:0)
你可以做这样的事情(sytax可能有点像,因为我主要用VB编写代码):
List<String> pathOfElements = new List<String>
IO.FileSystemInfo() elementsList = New IO.DirectoryInfo("C:\").GetFileSystemInfos()
foreach element as FileSystemInfo in elementsList
pathOfElements.add(element.FullPath)
next
使用GetFileSystemInfos
,您可以在gived目录中看到目录和文件(另外,您可以使用GetFileSystemInfos(String)
来获取与指定搜索条件匹配的文件和子目录)
为了存储有关文件和目录的信息,如果你使用完整路径,你只需要一个字符串列表。
答案 4 :(得分:0)
在第一次拍摄时,我会尝试这样的事情:
public class Entry
{
public string Name { get; private set; }
public EntryType Type { get; private set; }
private FileInfo _FileInfo;
private DirectoryInfo _DirectoryInfo;
public Entry(FileInfo fileInfo)
{
_FileInfo = fileInfo;
Type = EntryType.FileInfo;
Name = fileInfo.Name;
}
public Entry(DirectoryInfo directoryInfo)
{
_DirectoryInfo = directoryInfo;
Type = EntryType.DirectoryInfo;
Name = directoryInfo.Name;
}
public IEnumerable<Entry> Childs
{
get
{
if (Type != EntryType.DirectoryInfo
|| _DirectoryInfo == null)
{
throw new ArgumentNullException();
}
foreach (var directory in _DirectoryInfo.GetDirectories())
{
yield return new Entry(directory);
}
foreach (var file in _DirectoryInfo.GetFiles())
{
yield return new Entry(file);
}
}
}
public enum EntryType
{
None,
FileInfo,
DirectoryInfo
}
}
这是未经测试的,实际上我不知道你是否会遇到yield return new ...
的问题。