101 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;
using System.Management.Automation.Provider;
namespace Intel.Management.PSModule
{
class DriveInfo : PSDriveInfo
{
protected DriveContainer _root;
ChildWriter _defaultWriter;
public DriveInfo(PSDriveInfo driveInfo)
: base(driveInfo)
{
}
public DriveItem GetItemFromPath(string path)
{
return GetItemFromPath(path, null);
}
public virtual DriveItem GetItemFromPath(string path,DriveProvider provider)
{
char[] pathChar = { '\\', '/' };
string[] paths = path.Split(pathChar, StringSplitOptions.RemoveEmptyEntries);
//find item in path
DriveItem parent = _root;
DriveItem foundItem = null;
if (string.Compare(path, _root.Name, true) == 0 ||
string.Compare(path, "\\", true)==0 ||
string.Compare(path, "/", true)==0)
{
foundItem = _root;
}
if (_defaultWriter == null)
_defaultWriter = new ChildWriter();
for (int i = 0; i < paths.Length; i++)
{
foundItem = null;
if (parent is DriveContainer)
{
DriveContainer parentContainer = parent as DriveContainer;
_defaultWriter.Provider = provider;
_defaultWriter.SetParent(parentContainer);
try
{
_defaultWriter.Flush();
}
finally
{
_defaultWriter.SetParent(null);
_defaultWriter.Provider = null;
}
DriveItem[] items = parentContainer.GetChildItems();
foreach (DriveItem childItem in items)
{
if (string.Compare(childItem.Name, paths[i], true) == 0)
{
foundItem = childItem;
parent = foundItem;
break;
}
}
}
if (foundItem == null)//path not correct
{
break;
}
}
return foundItem;
}
public ChildWriter DefaultWriter
{
get { return _defaultWriter; }
}
}
}