101 lines
2.6 KiB
C#
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; }
|
|
}
|
|
|
|
|
|
}
|
|
}
|