tst: memfs-dotnet: ReadDirectory fixes

This commit is contained in:
Bill Zissimopoulos 2017-05-07 15:45:01 -07:00
parent bf64bcf9ba
commit a6ff8a87de

View File

@ -134,11 +134,11 @@ namespace memfs
} }
public Boolean HasChild(FileNode FileNode) public Boolean HasChild(FileNode FileNode)
{ {
foreach (String Name in GetChildrenFileNames(FileNode)) foreach (String Name in GetChildrenFileNames(FileNode, null))
return true; return true;
return false; return false;
} }
public IEnumerable<String> GetChildrenFileNames(FileNode FileNode) public IEnumerable<String> GetChildrenFileNames(FileNode FileNode, String Marker)
{ {
String MinName = "\\"; String MinName = "\\";
String MaxName = "]"; String MaxName = "]";
@ -147,9 +147,11 @@ namespace memfs
MinName = FileNode.FileName + "\\"; MinName = FileNode.FileName + "\\";
MaxName = FileNode.FileName + "]"; MaxName = FileNode.FileName + "]";
} }
if (null != Marker)
MinName = FileNode.FileName + Marker;
foreach (String Name in Set.GetViewBetween(MinName, MaxName)) foreach (String Name in Set.GetViewBetween(MinName, MaxName))
if (Name.Length > MinName.Length && if (Name != MinName &&
-1 == Name.IndexOfAny(Delimiters, MinName.Length)) Name.Length > MaxName.Length && -1 == Name.IndexOfAny(Delimiters, MaxName.Length))
yield return Name; yield return Name;
} }
public IEnumerable<String> GetStreamFileNames(FileNode FileNode) public IEnumerable<String> GetStreamFileNames(FileNode FileNode)
@ -776,25 +778,26 @@ namespace memfs
ChildrenFileNames.Add("."); ChildrenFileNames.Add(".");
ChildrenFileNames.Add(".."); ChildrenFileNames.Add("..");
} }
ChildrenFileNames.AddRange(FileNodeMap.GetChildrenFileNames(FileNode)); ChildrenFileNames.AddRange(FileNodeMap.GetChildrenFileNames(FileNode, Marker));
Context = Enumerator = ChildrenFileNames.GetEnumerator(); Context = Enumerator = ChildrenFileNames.GetEnumerator();
} }
while (Enumerator.MoveNext()) while (Enumerator.MoveNext())
{ {
String FullFileName = Enumerator.Current; String FullFileName = Enumerator.Current;
FileName = Path.GetFileName(FullFileName); if ("." == FullFileName)
if ("." == FileName)
{ {
FileName = ".";
FileInfo = FileNode.GetFileInfo(); FileInfo = FileNode.GetFileInfo();
return true; return true;
} }
else if (".." == FileName) else if (".." == FullFileName)
{ {
Int32 Result = STATUS_SUCCESS; Int32 Result = STATUS_SUCCESS;
FileNode ParentNode = FileNodeMap.GetParent(FileNode.FileName, ref Result); FileNode ParentNode = FileNodeMap.GetParent(FileNode.FileName, ref Result);
if (null != ParentNode) if (null != ParentNode)
{ {
FileName = "..";
FileInfo = ParentNode.GetFileInfo(); FileInfo = ParentNode.GetFileInfo();
return true; return true;
} }
@ -804,6 +807,7 @@ namespace memfs
FileNode ChildFileNode = FileNodeMap.Get(FullFileName); FileNode ChildFileNode = FileNodeMap.Get(FullFileName);
if (null != ChildFileNode) if (null != ChildFileNode)
{ {
FileName = Path.GetFileName(FullFileName);
FileInfo = ChildFileNode.GetFileInfo(); FileInfo = ChildFileNode.GetFileInfo();
return true; return true;
} }