Окончательное решение может быть следующим, скажите мне, что вы думаете?
FileAttrsManager - абстрактный класс, используемый для создания 2 производных классов:
- FileAttrsManagerDos : управление расширенными атрибутами с использованием DSOFile.dll *
- FileAttrsManagerUnix : управление расширенными атрибутами с использованием IronPython * и python-xattr **
[*] http: \\ www.microsoft.com/download/en/details.aspx?displaylang=en&id=8422
[**] http: \\ ironpython.codeplex.com
[** *] http: \\ pypi.python.org/pypi/xatt
Операция расширенных атрибутов (например, SetPropery(string key, object value)
и GetProperty(string key)
и т. Д.) Будет управляться в статическом классе ( FileAttrsProvider ), который инициализирует объект FileAttrsManager одним из двух производных типы то есть:
public static class FileAttrProvider
{
private static FileAttrReader _reader = null;
public static void Initialize()
{
switch (Environment.OSVersion.Platform)
{
case PlatformID.MacOSX:
case PlatformID.Unix:
_reader = new FileAttrReaderUnix();
break;
case PlatformID.Win32NT:
_reader = new FileAttrReaderDos();
break;
}
}
}
Хотя производный тип зависит от среды, для обеспечения автоматической отправки всех вызовов метода для объекта _reader используется исходный тип.